【问题标题】:How do async tests work in intern?异步测试如何在实习生中工作?
【发布时间】:2013-04-27 07:44:03
【问题描述】:

异步测试如何在实习生测试框架中工作?我试图让它们完全按照示例中的方式运行,但是异步测试立即通过,而无需等待回调运行。

it('should connect in 5 seconds', function () {
    var dfd = this.async(5000);
    conn.connect(credentials, dfd.callback(function(result) {
        expect(result).to.... something
    }));
}

测试立即通过。我做错了什么?

【问题讨论】:

  • 也许测试通过了,因为回调 is 按预期调用并且回调中的断言恰好通过了?我猜你已经验证了回调没有被调用。只是一个想法。
  • 好吧,conn.connect 必须执行异步请求,但回调会在任何 XMLHttpRequest 发生之前触发。
  • 好吧,我发现回调在建立连接之前就被触发了。但是,result 变量保存状态,只有当状态等于某个值时我才需要检查它。我可以说“这不是我的情况,当您遇到另一个结果时再次调用回调”?

标签: javascript asynchronous promise intern


【解决方案1】:

dfd.callback 在它自己被执行之前不会执行任何东西。请记住,它是为 Promise 回调设计的(即传递给 promise.then 的函数),而不是参数可能是错误的 Node.js 样式回调(即 function (error, result) {})。它不会检查是否有错误作为参数传递。

不知道 conn 是什么,但看到你如何将 dfd.callback 作为参数传递给不是承诺的东西,我怀疑你正在尝试使用 Node.js 样式的回调并且调用是立即出错。将来我们可能会为这些类型的回调提供一个方便的包装器,以将它们转换为 Promise 接口,但在那之前,您可能只需要这样做:

it('should connect in 5 seconds', function () {
    var dfd = this.async(5000);
    conn.connect(credentials, dfd.callback(function(error, result) {
        if (error) {
            throw error;
        }

        expect(result).to.... something
    }));
});

否则,在不知道 conn 是什么以及看到您的实际断言是什么的情况下,很难说出这里的问题所在。只要回调内部没有抛出错误,就认为测试成功。

编辑:因此,根据您上面的 cmets,您的回调听起来像是一个事件侦听器,使用不同的信息多次调用。在这种情况下,您可以这样做:

it('should connect in 5 seconds', function () {
    var dfd = this.async(5000);
    conn.connect(credentials, dfd.rejectOnError(function (result) {
        if (result !== 'what I want') {
            return;
        }

        expect(result).to.... something
        // all other tests…

        // nothing threw an error, so it is a successful test
        dfd.resolve();
    }));
});

dfd.rejectOnErrordfd.callback 一样工作,只是它不会自动解决promise;最后你自己做。

【讨论】:

  • 感谢您的回答!看看我上面的评论 - 我在那里描述了问题。
【解决方案2】:

你的结构没问题。 dfd 将超时设置为 5 秒以使测试成功,然后立即尝试 conn.connect(),这不是实习生框架的一部分。如果您尝试简单的 XHR 请求,请尝试使用 getUrlCallback 函数。

他们在这个网址上有一个非常酷的测试列表:https://github.com/theintern/intern/wiki/Writing-Tests。查找两个异步示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多