首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVA测试问题

AVA测试问题
EN

Stack Overflow用户
提问于 2016-03-10 19:26:09
回答 1查看 2.3K关注 0票数 3

我正试图用AVA编写一个测试,但我似乎无法让它开始工作。fn将回调函数传递给我的所有函数,并在完成所有操作后调用它。我的测试是

代码语言:javascript
复制
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, '');
  });
});

是的

代码语言:javascript
复制
This is a test
How is it going
So far!!!

但这意味着我的考试通过了。我一直在跟踪测试。这是我一直在看的片段

代码语言:javascript
复制
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();
    });
});

有人能向我解释我做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-10 21:11:25

很抱歉,您看到的单元测试使用的是tap,而不是AVA。(AVA不使用自己进行测试.(目前为止)。

我猜fn是异步的。在这种情况下,您可能希望使用test.cb

代码语言:javascript
复制
test.cb('NonLiteral && Literal', function (t) {
    fn('test.txt', '', function (res) {
        console.log(res);
        t.is(res, '');
        t.end();
    });
});

现在看来,fn可能会多次调用该回调,但是调用t.end()不止一次是错误的。如果是这样的话,您将需要这样做:

代码语言:javascript
复制
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文档中记录了这两种测试策略。更多关于可观察性的信息很容易通过谷歌找到。

谢谢你尝试艾娃。继续问这些问题!

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35925468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档