如何断言nodeunit中的错误消息?

时间:2015-12-17 05:41:06

标签: node.js nodeunit

我正在尝试编写断言来检查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中执行此操作的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

nodeunit API

的以下方法
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 assertShould.js