From fc3eb0fbd89c5320fcdae493926de0e9ba910eed Mon Sep 17 00:00:00 2001 From: ivan baktsheev Date: Fri, 12 Apr 2019 18:46:12 +0300 Subject: [PATCH] Handle node.js `assert` as an error in your specs --- spec/core/ExpectationResultSpec.js | 33 ++++++++++++++++++++++++++++++ src/core/ExpectationResult.js | 18 +++++++++++++++- src/core/requireCore.js | 2 +- 3 files changed, 51 insertions(+), 2 deletions(-) diff --git a/spec/core/ExpectationResultSpec.js b/spec/core/ExpectationResultSpec.js index d9af2322..b28818aa 100644 --- a/spec/core/ExpectationResultSpec.js +++ b/spec/core/ExpectationResultSpec.js @@ -90,4 +90,37 @@ describe('buildExpectationResult', function() { }); expect(result.actual).toBe('some-value'); }); + + it('handles nodejs assertions', function() { + if (typeof require === 'undefined') { + return; + } + var assert = require('assert'); + var error; + var value = 8421; + var expectedValue = 'JasmineExpectationTestValue'; + try { + assert.equal(value, expectedValue); + } catch (e) { + error = e; + } + + expect(error.code).toEqual('ERR_ASSERTION'); + expect(error.actual).toEqual(value); + expect(error.expected).toEqual(expectedValue); + expect(error.operator).toEqual('=='); + + var result = jasmineUnderTest.buildExpectationResult({ + passed: false, + matcherName: '', + expected: '', + actual: '', + error: error + }); + + expect(result.code).toEqual('ERR_ASSERTION'); + expect(result.actual).toEqual(value); + expect(result.expected).toEqual(expectedValue); + expect(result.matcherName).toEqual('assert =='); + }); }); diff --git a/src/core/ExpectationResult.js b/src/core/ExpectationResult.js index 43545c43..7f298bc7 100644 --- a/src/core/ExpectationResult.js +++ b/src/core/ExpectationResult.js @@ -1,5 +1,5 @@ //TODO: expectation result may make more sense as a presentation of an expectation. -getJasmineRequireObj().buildExpectationResult = function() { +getJasmineRequireObj().buildExpectationResult = function(j$) { function buildExpectationResult(options) { var messageFormatter = options.messageFormatter || function() {}, stackFormatter = options.stackFormatter || function() {}; @@ -23,6 +23,22 @@ getJasmineRequireObj().buildExpectationResult = function() { if (!result.passed) { result.expected = options.expected; result.actual = options.actual; + + if (options.error && !j$.isString_(options.error)) { + if ('code' in options.error) { + result.code = options.error.code; + } + + if ( + options.error.code === 'ERR_ASSERTION' && + options.expected === '' && + options.actual === '' + ) { + result.expected = options.error.expected; + result.actual = options.error.actual; + result.matcherName = 'assert ' + options.error.operator; + } + } } return result; diff --git a/src/core/requireCore.js b/src/core/requireCore.js index a2c5f177..baacd713 100644 --- a/src/core/requireCore.js +++ b/src/core/requireCore.js @@ -48,7 +48,7 @@ var getJasmineRequireObj = (function(jasmineGlobal) { j$.ExpectationFilterChain = jRequire.ExpectationFilterChain(); j$.Expector = jRequire.Expector(j$); j$.Expectation = jRequire.Expectation(j$); - j$.buildExpectationResult = jRequire.buildExpectationResult(); + j$.buildExpectationResult = jRequire.buildExpectationResult(j$); j$.noopTimer = jRequire.noopTimer(); j$.JsApiReporter = jRequire.JsApiReporter(j$); j$.matchersUtil = jRequire.matchersUtil(j$);