私は非同期JavaScript関数を書いていますが、私が期待する戻り値を得ていないようです。私は、非同期関数がどのように機能するのかを誤解しているのか、それとも私のテストが間違っているのか、誰かが説明できますか?非同期非同期テストJavaScript関数を待機します
以下は私のテストで、サービスはNockを使って嘲笑されています。
it('Should call async validation function when button is clicked',() => {
const request = nock(/.*/)
.get('/my-service/logincodes/abc123')
.reply(404);
const comp = mount(
<LoginCodeView />
);
expect(comp.instance().doesLoginCodeExist('abc123')).to.equal('Your Login code is not recognized.');
});
とテスト対象機能:私は、コードを取り、それは予想通り、他の場合はブランチに行くように見えるんどのルートにログアウトしました
doesLoginCodeExist = async (loginCode) => {
if (loginCode.match(loginPattern)) {
const response = await MyService.getUserByLoginCode(loginCode);
if (response.code) {
return {};
} else if (response.status === 404) {
return { error: 'Your login code is not recognized.', success: null };
}
return { error: 'Service is temporarily unavailable.', success: null };
}
return null;
};
、しかし私は常に取得空のオブジェクト{}が返されましたが、期待どおりのエラーと成功のプロパティを持つオブジェクトではありませんか?
'async'関数は常に' Promise'オブジェクトを返します。私はこれがあなたが空のオブジェクトと呼んでいるものと思われます。あなたのテスト関数を 'async'にして、' await'を使ってみてください。 –
ありがとう@ AlexanderO'Maraは私のテスト非同期を魅力的に働かせています。 – deanmau5