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();
    });

});

リクエストの promise に添付された errorcallback で、テストが失敗したとマークすることも良い考えです。

于 2013-04-15T13:45:40.413 に答える
1

Typescript の作業ソリューション:

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