私は約束を使用するmongooseオブジェクトを単体テストしようとしています。私は下のテストを書いて、それは動作しますが、それは完全ではありません。私は 'then'や 'catch'メソッドが呼び出されたかどうかをテストする方法を理解できません。単位テストmongooseはsinonで約束します
私は約束を解決するときに「then」メソッドが呼び出されることをスパイで確認するにはどうすればよいですか?正しい方向に私を助けるため@ReedD
export function create(req, res) {
User
.createAsync(req.body)
.then(handleCreate(res, req.originalUrl))
.catch(handleError(res));
}
ユニットテスト
it('should do something',() => {
const req = {
body: 45,
};
const res = {};
const mockRole = sandbox.mock(Role).expects('createAsync').once().withArgs(45)
.returns(Promise.resolve());
controller.create(req, res);
});
私が使用した溶液WITH UPDATE(5月6日、2016年)
感謝をテストするための
方法
これは「機能する」とはいえ、私のコードよりも約束事の機能性をテストしているようなウナギ。
it('should call create with args and resolve the promise',() => {
const createSpy = sinon.spy();
const errorSpy = sinon.spy();
sandbox.stub(responses, 'responseForCreate').returns(createSpy);
sandbox.stub(responses, 'handleError').returns(errorSpy);
sandbox.mock(Role).expects('createAsync').once().withArgs(45)
.returns(Promise.resolve());
return controller.create(req, res).then(() => {
expect(createSpy.calledOnce).to.be.equal(true);
expect(errorSpy.calledOnce).to.be.equal(false);
});
});
感謝。これは、私が使用し終わった解決策のための正しい道に私を得ました。結局のところ私はPromisesの機能を単体テストしているような気がします:D – VtoCorleone
本当に、このユニットテストはあなたの 'create'関数が正しく動作していることを保証します。 'handleCreate'と' handleError'も正しく動作するように、単体テストをもっと書くべきです。 – ReedD