11

如何以异步方式测试它?

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()。

4

2 回答 2

7

一旦所有异步操作完成,您需要调用 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();
    });

});

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

于 2013-04-15T13:45:40.413 回答
1

Typescript 中的工作解决方案:

 var returnPromise = myService.method()
    returnPromise.done(() => {
        mock.verify()
    })
于 2016-02-14T10:32:46.820 回答