如何以异步方式测试?
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()。
答案 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}}