如何测试在异步测试中返回promise的存根?

时间:2013-04-15 12:56:30

标签: javascript testing mocha promise sinon

如何以异步方式测试?

it('Should test something.', function (done) {

    var req = someRequest,
        mock = sinon.mock(response),
        stub = sinon.stub(someObject, 'method');

     // returns a promise
     stub.withArgs('foo').returns(Q.resolve(5));

     mock.expects('bar').once().withArgs(200);

     request(req, response);

     mock.verify();

});

这是测试的方法。

var request = function (req, response) {

    ...

    someObject.method(someParameter)
        .then(function () {
            res.send(200);
        })
        .fail(function () {
            res.send(500);
        });

};

正如您所看到的,我正在使用node.js,Q(用于承诺),sinon用于模拟和存根以及mocha作为测试环境。上面的测试因请求方法的异步行为而失败,我不知道何时在测试中调用done()。

2 个答案:

答案 0 :(得分:6)

所有异步操作完成后,您需要调用done。你认为那会是什么时候?您通常会等到请求完成后才会这样做?

it('Should test something.', function (done) {

   var req = someRequest,
       mock = sinon.mock(response),
       stub = sinon.stub(someObject, 'method');

    // returns a promise
    stub.withArgs('foo').returns(Q.resolve(5));

    mock.expects('bar').once().withArgs(200);

    request(req, response).then(function(){
       mock.verify();
       done();
    });

});

将测试标记为在请求承诺附加的错误回调中失败也是一个好主意。

答案 1 :(得分:1)

打字稿中的工作解决方案:

{{1}}