我正在尝试编写断言来检查nodeunit中的错误消息。如果错误消息与我的预期不符,我希望测试失败。但是,似乎并不存在API。这是我想要做的:
foo.js
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
Simpletablecell *cell = (Simpletablecell *)[tableView cellForRowAtIndexPath:indexpath]; // SimpletableCell is your cell you can add your cell here like UITableViewCell..
self.lbl1.text = cell.lbl3.text;// cell.lbl3 is a label of cell.
self.lbl2.text = cell.lbl4.text;// here only two labels values get you can get other labels also
//......
//....
}
foo.test.js
function foo() {
...
throw new MyError('Some complex message');
}
如果错误消息不'某些复杂消息',我希望testFoo(test) {
test.throws(foo, MyError, 'Some complex message');
}
失败,但这不是它的工作原理。似乎“一些复杂的消息”只是一条解释测试失败的消息。它不涉及断言。在nodeunit中执行此操作的最佳方法是什么?
答案 0 :(得分:2)
throws(block, [error], [message]) - Expects block to throw an error.
可以接受[error]参数的函数。
该函数接受actual
参数并返回true|false
以指示断言是成功还是失败。
这样,如果你想断言某个方法抛出Error
并且该错误包含一些特定的消息,你应该写一个这样的测试:
test.throws(foo, function(err) {
return (err instanceof Error) && /message to validate/.test(err)
}, 'assertion message');
示例:
function MyError(msg) {
this.message = msg;
}
MyError.prototype = Error.prototype;
function foo() {
throw new MyError('message to validate');
}
exports.testFooOk = function(test) {
test.throws(foo, function(actual) {
return (actual instanceof MyError) && /message to validate/.test(actual)
}, 'Assertion message');
test.done();
};
exports.testFooFail = function(test) {
test.throws(foo, function(actual) {
return (actual instanceof MyError) && /another message/.test(actual)
}, 'Assertion message');
test.done();
};
输出:
✔ testFooOk
✖ testFooFail
实际上任何从node.js断言模块实现函数的测试框架都支持它。例如:node.js assert或Should.js