失败时异步测试不会出错

时间:2013-07-02 10:56:26

标签: javascript intern

我在使用简单的异步测试时遇到了一些麻烦。以下代码不会在控制台中抛出任何错误,即使它应该,因为传递给函数的data不等于0

define([
    'intern!bdd',
    'intern/chai!expect'
], function (bdd, expect) {
    with (bdd) {
        describe('Test', function () {
            it('async test', function(){
                var dfd = this.async(2000);
                var wait = function(ms) {
                    setTimeout(function(){
                        dfd.resolve('test');
                    }, ms);

                    return dfd.promise;
                };

                wait(1500).then(dfd.callback(function (data) {
                    // data === 'test', so this should fail.
                    expect(data).to.equal(0);
                }), dfd.reject.bind(dfd));
            });
        });
    }
});

我很确定我搞砸了某个地方,因为我从未使用过承诺,但我无法弄清楚在哪里。任何想法都会有所帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

您正在为两个不同的异步操作使用相同的Deferred对象并在第一次解析它(=成功测试)。您需要为wait函数创建自己独立的Deferred对象:

define([
    'intern!bdd',
    'intern/chai!expect',
    'intern/node_modules/dojo/Deferred'
], function (bdd, expect, Deferred) {
    with (bdd) {
        describe('Test', function () {
            it('async test', function(){
                var dfd = this.async(2000);
                var wait = function(ms) {
                    var waitDfd = new Deferred();
                    setTimeout(function(){
                        waitDfd.resolve('test');
                    }, ms);

                    return waitDfd.promise;
                };

                wait(1500).then(dfd.callback(function (data) {
                    // data === 'test', so this should fail.
                    expect(data).to.equal(0);
                }), dfd.reject.bind(dfd));
            });
        });
    }
});