我希望能找到一些帮助解决这个问题.我正在尝试为我正在编写的应用程序编写测试.我已将问题提炼到以下示例代码中.我想测试一个错误被抛出.我使用Testacular作为测试运行器,mocha作为框架,chai作为断言库.测试运行,但测试失败,因为抛出了错误!任何帮助是极大的赞赏!
function iThrowError() {
throw new Error("Error thrown");
}
var assert = chai.assert,
expect = chai.expect;
describe('The app', function() {
describe('this feature', function() {
it("is a function", function(){
assert.throw(iThrowError(), Error, "Error thrown");
});
});
});
Run Code Online (Sandbox Code Playgroud) 鉴于此代码:
var assert = require('assert');
function boom(){
throw new Error('BOOM');
}
assert.throws( boom(), Error );
Run Code Online (Sandbox Code Playgroud)
我得到这个输出,节点0.4.9:
node.js:134
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: BOOM
at boom ([EDITED]/assert.throws.test.js:4:9)
at Object.<anonymous> ([EDITED]/assert.throws.test.js:7:17)
at Module._compile (module.js:402:26)
at Object..js (module.js:408:10)
at Module.load (module.js:334:31)
at Function._load (module.js:293:12)
at Array.<anonymous> (module.js:421:10)
at EventEmitter._tickCallback (node.js:126:26)
Run Code Online (Sandbox Code Playgroud)
对我来说,这意味着发生了未捕获的异常,而不是报告的异常.查看文档,我注意到示例看起来更像是这样的:
var assert = require('assert');
function boom(){
throw new Error('BOOM');
}
assert.throws( boom, Error );
Run Code Online (Sandbox Code Playgroud)
但是,如果给出一定的输入,你如何测试它是否会抛出异常?例如:
var assert = require('assert');
function boom(blowup){
if(blowup)
throw new …Run Code Online (Sandbox Code Playgroud) 试图测试一些抛出Mocha/Chai异常的代码,但没有运气,这是我试图测试的简单代码:
class window.VisualizationsManager
test: ->
throw(new Error 'Oh no')
Run Code Online (Sandbox Code Playgroud)
这是我的测试:
describe 'VisualizationsManager', ->
it 'does not permit the construction of new instances', ->
manager = new window.VisualizationsManager
chai.expect(manager.test()).to.throw('Oh no')
Run Code Online (Sandbox Code Playgroud)
但是,当我运行规范时,测试失败并抛出异常.
Failure/Error: Oh no
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
我一直在尝试做一个函数的文本来处理错误,如果它是一个有效的错误,它会被抛出,但如果不是,那么什么都不会抛出.问题是我似乎无法在使用时设置参数:
expect(handleError).to.throw(Error);
Run Code Online (Sandbox Code Playgroud)
理想的是使用:
expect(handleError(validError)).to.throw(Error);
Run Code Online (Sandbox Code Playgroud)
有没有办法实现这个功能?
功能代码:
function handleError (err) {
if (err !== true) {
switch (err) {
case xxx:
...
}
throw "stop js execution";
else {}
}
Run Code Online (Sandbox Code Playgroud)
和测试代码(不按预期工作):
it("should stop Javascript execution if the parameter isnt \"true\"", function() {
expect(handleError).to.be.a("function");
expect(handleError(true)).to.not.throw(Error);
expect(handleError("anything else")).to.throw(Error);
});
Run Code Online (Sandbox Code Playgroud) 我目前正在测试我的应用程序chai.我想测试一个我的方法抛出的错误.为此,我写了这个测试:
expect ( place.updateAddress ( [] ) ).to.throw ( TypeError );
Run Code Online (Sandbox Code Playgroud)
这是方法:
Place.prototype.updateAddress = function ( address ) {
var self = this;
if ( ! utils.type.isObject ( address ) ) {
throw new TypeError (
'Expect the parameter to be a JSON Object, ' +
$.type ( address ) + ' provided.'
);
}
for ( var key in address ) if ( address.hasOwnProperty ( key ) ) {
self.attributes.address[key] = address[key];
}
return self;
};
Run Code Online (Sandbox Code Playgroud)
问题是, …
使用节点的断言模块如何测试错误消息?
throw new Error('Email is required!');
Run Code Online (Sandbox Code Playgroud)
我使用assert.throws来检查是否抛出错误:
assert.throws(myFunction, Error);
Run Code Online (Sandbox Code Playgroud)
但这并不提供检查消息的能力。
使用Chai和Mocha,我会用什么语法断言在使用new关键字执行构造函数时会抛出错误?我使用以下内容时出错:
assert.throw(new SomeFunction, Error);
返回:
AssertionError: expected { Object () } to be a function
我正在使用Chai.should,我需要测试一个异常,但无论我尝试什么,我都无法让它工作.该文档只能说明expect:(
我有这个Singleton类,如果你尝试,会抛出一个错误
new MySingleton();
Run Code Online (Sandbox Code Playgroud)
这是抛出错误的构造函数
constructor(enforcer) {
if(enforcer !== singletonEnforcer) throw 'Cannot construct singleton';
...
Run Code Online (Sandbox Code Playgroud)
现在我想检查一下这种情况
it('should not be possible to create a new instance', () => {
(function () {
new MySingleton();
})().should.throw(Error, /Cannot construct singleton/);
});
Run Code Online (Sandbox Code Playgroud)
要么
new MySingleton().should.throw(Error('Cannot construct singleton');
Run Code Online (Sandbox Code Playgroud)
这些都不起作用.这是怎么做到的?有什么建议 ?
我已经搜索了如何解决这个问题,但我测试的所有解决方案都不适用于我的情况。
我有一个返回承诺的函数,我正在尝试使用 Mocha 和 Chai 进行测试。
我正在模糊参数,所以函数总是返回:
拒绝('拒绝原因')
这是我尝试运行的测试:
describe('fuzzing tokenization with 1000 invalid values', () => {
it('should throw an error - invalid value', async () => {
for(var i=0; i <= 1000; i++){
var req = {
body: {
value: fuzzer.mutate.string('1000000000000000')
},
user: {
displayName: user
}
};
expect(await tokenizer.tokenize(req)).to.throw(Error);
}
});
});
Run Code Online (Sandbox Code Playgroud)
测试失败:
错误:字符串“无效值”。被抛出,抛出一个错误:)
我测试了几个变化,比如将期望包装成一个函数
expect(async () => { ...}).to.throw(Error);
和其他我发现谷歌搜索。但我无法让它发挥作用。
我错过了什么?
我对Chai很新,所以我仍然要掌握一切.
我编写的函数将检查API响应并返回正确的消息或抛出错误.
networkDataHelper.prototype.formatPostcodeStatus = function(postcodeStatus) {
if (postcodeStatus.hasOwnProperty("errorCode")) {
//errorCode should always be "INVALID_POSTCODE"
throw Error(postcodeStatus.errorCode);
}
if (postcodeStatus.hasOwnProperty("lori")) {
return "There appears to be a problem in your area. " + postcodeStatus.lori.message;
}
else if (postcodeStatus.maintenance !== null) {
return postcodeStatus.maintenance.bodytext;
}
else {
return "There are currently no outages in your area.";
}
};
Run Code Online (Sandbox Code Playgroud)
我已经设法为消息传递编写测试,但是,我正在努力进行错误测试.这是我迄今为止所写的内容:
var networkDataHelper = require('../network_data_helper.js');
describe('networkDataHelper', function() {
var subject = new networkDataHelper();
var postcode;
describe('#formatPostcodeStatus', function() {
var status = {
"locationValue":"SL66DY",
"error":false, …Run Code Online (Sandbox Code Playgroud) chai ×8
javascript ×7
mocha.js ×6
node.js ×3
unit-testing ×3
testing ×2
assert ×1
coffeescript ×1
ecmascript-6 ×1
node-assert ×1