使用 Mocha 测试 Promise 时发生错误

Posted

技术标签:

【中文标题】使用 Mocha 测试 Promise 时发生错误【英文标题】:Error Occurs in Testing Promises With Mocha 【发布时间】:2016-12-30 01:06:15 【问题描述】:

我正在使用 mocha 和 chai 对 AngularJS 服务执行一些单元测试。该服务具有不同的功能,每个功能都返回一个承诺。

我面临的问题是测试没有等待承诺值在断言之前得到解决。我知道 done() 回调可以与 mocha 一起使用。所以,我尝试过使用它。但这也给了我一个错误。代码如下:

describe('Service Test', function() 

    var factory;
    beforeEach(module('Test'));
    beforeEach(inject(function(_QueryService_)
            factory = _QueryService_;
        )
    );
    it('should check simpleQuery method',function(done)

        var promise = factory.query("args");
        var value;
        promise.then(function(data)
            value = data;
            assert.equal(1,2);
            done();
        , function(error)
            assert.equal(3,4);
            done();
        );
    );
);

所以现在的问题是测试没有失败(应该如此)。相反,它只是超时并给我一个错误:“超过 2000 毫秒的超时。确保在此测试中调用了 done() 回调

如果我不包含 done 回调,则测试通过,因为它甚至不评估条件。

有人可以提出解决办法吗?谢谢!

【问题讨论】:

当你不使用done时,你真的返回了promise吗?如果你不这样做,它将无法工作。 @leMS 我的解决方案对您有用吗?如果是,请将其标记为已解决。 :) 【参考方案1】:

我在 Node.js 中使用 chai 和 mocha 进行测试。我测试的大部分内容都是承诺。这里有一些示例代码可以帮助您入门。

var chai = require('chai'),
    expect = chai.expect;

chai.use(require('chai-things'))
    .use(require('chai-as-promised'));
chai.should();

describe(' Testing:', function() 
    describe('#getBlah', function() 
        describe('If blah', function() 
            it('Should should blah', function() 
                return service.getBlahAsync(foo, bar).should.eventually.have.length(0);
            );
        );

describe('If blahblah', function() 
    it('Should should blahblah', function() 
        return service.getBlahAsync(foo, bar).should.eventually.all.have.property(foobarbaz);
    );
);

您还可以执行一些操作,例如增加测试的超时持续时间。可以在here 找到相关文档。

【讨论】:

以上是关于使用 Mocha 测试 Promise 时发生错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 Mocha 进行测试:基于 Promise 的测试不会自行运行?

使用 mocha 和 chaiAsPromised 测试异步函数时的断言错误

当 app 是 Promise 时启动 mocha chai 测试

使用 Mocha 和 Chai-as-Promised 测试被拒绝的 Promise 的特定属性

Mocha.js 101同步异步与 Promise

对 Promise 结果运行多个测试 - Mocha