我想编写一个辅助函数,它可以断言作为参数给出的测试函数,也可以默认调用assert.equal。
运行以下代码时,出现以下错误:Expected 1 assertions, 0 ran
var assert = require('nodeunit').assert;
var interpretTest = function(expression, expected, testFunction) {
testFunction = testFunction || assert.equal;
return function(test) {
test.expect(1);
testFunction(expression, expected);
test.done();
};
};
exports.testEqual = interpretTest([8, 6], [8, 6], assert.deepEqual);
当删除test.expect(1)但是有0个断言时,测试通过。
答案 0 :(得分:0)
问题是nodeunit wraps each assertion in some logic跟踪测试用例中完成的所有事情。 Expect
设置了预期的断言数,当done
被调用时,它将simply check that the number of assertions that actually ran is what you expected。
由于测试对象被传递给每个测试函数,因此很难从辅助函数更改其状态。我提出了以下解决方案:
var getTestMethod = function(methodName) {
return function(test) { return test[methodName]; };
};
var equal = getTestMethod('equal');
var deepEqual = getTestMethod('deepEqual');
var interpretTest = function(expression, expected, testMethodFactory) {
testMethodFactory = testMethodFactory || equal;
return function(test) {
var testMethod = testMethodFactory(test);
test.expect(1);
testMethod(expression, expected);
test.done();
};
};
exports.testNumbers = interpretTest(8, 8);
exports.testArrays = interpretTest([8, 6], [8, 6], deepEqual);
也许你可以找到一种简化方法,但它有效。 getTestMethod
返回一个函数,该函数返回测试对象上的一个断言方法。
要使用它,请将当前测试对象传递给factory方法,该方法将返回所需的断言。通过这种方式,您可以获得当前断言的正确上下文。
我猜您可以将getTestMethod
视为assertionFactoryFactory
,但听起来too evil。