我正试图用AVA编写一个测试,但我似乎无法让它开始工作。fn将回调函数传递给我的所有函数,并在完成所有操作后调用它。我的测试是
import test from 'ava';
import fn from './index.js';
test('NonLiteral && Literal', function (t) {
fn('test.txt', '', function (res) {
console.log(res);
t.is(res, '');
});
});是的
This is a test
How is it going
So far!!!但这意味着我的考试通过了。我一直在跟踪这测试。这是我一直在看的片段
test('throwing a named function will report the to the console', function (t) {
execCli('fixture/throw-named-function.js', function (err, stdout, stderr) {
t.ok(err);
t.match(stderr, /\[Function: fooFn]/);
// TODO(jamestalmage)
// t.ok(/1 uncaught exception[^s]/.test(stdout));
t.end();
});
});有人能向我解释我做错了什么吗?
发布于 2016-03-10 21:11:25
很抱歉,您看到的单元测试使用的是tap,而不是AVA。(AVA不使用自己进行测试.(目前为止)。
我猜fn是异步的。在这种情况下,您可能希望使用test.cb。
test.cb('NonLiteral && Literal', function (t) {
fn('test.txt', '', function (res) {
console.log(res);
t.is(res, '');
t.end();
});
});现在看来,fn可能会多次调用该回调,但是调用t.end()不止一次是错误的。如果是这样的话,您将需要这样做:
test.cb('NonLiteral && Literal', function (t) {
var expected = ['foo', 'bar', 'baz'];
var i = 0;
fn('test.txt', '', function (res) {
t.is(res, expected[i]);
i++;
if (i >= expected.length) {
t.end();
}
});
});最后,我鼓励您考虑实现一个基于承诺的api,以便您可以利用async函数和await关键字。最后,它创建了比回调更干净的代码。在需要多次调用回调的情况下,请考虑可观察性。AVA文档中记录了这两种测试策略。更多关于可观察性的信息很容易通过谷歌找到。
谢谢你尝试艾娃。继续问这些问题!
https://stackoverflow.com/questions/35925468
复制相似问题