繁体   English   中英

如何编写用于使用mongoose,mocha和chai将对象插入和检索到mongodb的单元测试?

[英]How to write a Unit test for inserting and retrieving an object to mongodb using mongoose, mocha and chai?

我正在尝试编写用于将文档插入(然后检索)文档到mongodb的单元测试。 但是,我一直收到超时错误,这表明从不调用done (Mongod正在运行,我可以使用console.log看到插入的对象以及被检索的对象。)

我正在使用什么:

Node.js,ES6,猫鼬,摩卡,柴

CheckbookEntry是对某些Mongoose调用的怪异包装,让我凭承诺工作。

    describe('create and getOneById', () => {
    it('creates a new checkbookEntry, and retrieves it from the db', (done) => {
        var EXAMPLE_ENTRY = {
            type: 'debit',
            date: Date(),
            description: 'Example of a cb entry',
            account: 'PNC',
            amount: 239.33
        };

        CheckbookEntry.create(EXAMPLE_ENTRY.type,
                              EXAMPLE_ENTRY.date,
                              EXAMPLE_ENTRY.description,
                              EXAMPLE_ENTRY.account,
                              EXAMPLE_ENTRY.amount)
                        .then(function(createdEntry){
                            return CheckbookEntry.getOneById(createdEntry._id);
                        })
                        .then(function(foundEntry){
                            expect(foundEntry).to.eql(EXAMPLE_ENTRY);
                            done();
                        }, function(err){
                            assert.fail(err);
                            done();
                        });
    }).timeout(5000);

}); // end describe create

关于如何使它工作的任何建议?

我只能猜测,但是我认为问题可能是由以下原因引起的:

.then(function(foundEntry){
    expect(foundEntry).to.eql(EXAMPLE_ENTRY);
    done();
}, function(err){
    assert.fail(err);
    done();
});

更具体地说,在未完成承诺链的情况下在已完成/拒绝处理程序中使用断言。

如果断言引发异常,则done()将永远不会被调用。 并且取决于所使用的Promise实现,您甚至可能永远都不会收到有关该异常的通知。 同样,在onFulFilled处理程序中引发的异常不会触发传递给相同onRejected .then()方法的onRejected处理程序。

因为Mocha 支持开箱即用的Promise ,而不是使用done回调,所以返回您的Promise链:

return CheckbookEntry.create(...)
                     .then(...)
                     .then(..., ...);

这样,异常将传播回Mocha,Mocha将对其进行处理。

FWIW,猫鼬还支持开箱即用的承诺

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM