[解決済み] Jestでモックがエラーを投げるようにするにはどうしたらいいですか?
2022-03-06 11:50:35
質問
Jestを使用してGraphQL apiをテストしています。
各クエリ/ミューテーションに個別のテストスイートを使用しています。
2つのテスト(それぞれ別のテストスーツ)があり、1つの関数(つまりMeteorの
callMethod
) が、突然変異で使用されます。
it('should throw error if email not found', async () => {
callMethod
.mockReturnValue(new Error('User not found [403]'))
.mockName('callMethod');
const query = FORGOT_PASSWORD_MUTATION;
const params = { email: '[email protected]' };
const result = await simulateQuery({ query, params });
console.log(result);
// test logic
expect(callMethod).toBeCalledWith({}, 'forgotPassword', {
email: '[email protected]',
});
// test resolvers
});
私が
console.log(result)
私は
{ data: { forgotPassword: true } }
この動作は、私が望んでいるものではありません。
.mockReturnValue
Errorを投げるので
result
はエラーオブジェクトを持つ
しかし、このテストの前に、別のテストが実行されます。
it('should throw an error if wrong credentials were provided', async () => {
callMethod
.mockReturnValue(new Error('cannot login'))
.mockName('callMethod');
そして、それは正常に動作し、エラーがスローされます
テスト終了後にモックがリセットされないのが問題なんだろう。
私の
jest.conf.js
私は
clearMocks: true
テストスーツはそれぞれ別のファイルになっていて、こんな風にテストの前に関数のモックを作っています。
import simulateQuery from '../../../helpers/simulate-query';
import callMethod from '../../../../imports/api/users/functions/auth/helpers/call-accounts-method';
import LOGIN_WITH_PASSWORD_MUTATION from './mutations/login-with-password';
jest.mock(
'../../../../imports/api/users/functions/auth/helpers/call-accounts-method'
);
describe('loginWithPassword mutation', function() {
...
アップデイト
を代入したところ
.mockReturnValue
で
.mockImplementation
は、すべて期待通りに動作しました。
callMethod.mockImplementation(() => {
throw new Error('User not found');
});
しかし、それではなぜ別のテストでは
.mockReturnValue
は正常に動作するのですが・・・。
解決方法は?
変更
.mockReturnValue
で
.mockImplementation
:
yourMockInstance.mockImplementation(() => {
throw new Error();
});
プロミスであれば、.rejectsも可能です。 www.jestjs.io/docs/en/asynchronous#resolves--rejects
関連
-
[解決済み】SyntaxError: 'import' と 'export' は 'sourceType: module' とだけ表示されるかもしれない - Gulp
-
[解決済み】Uncaught SyntaxError: JSON の位置 0 に予期しないトークン u があります。
-
[解決済み】Kendo Observable Bindingと併用する場合、Kendo Switch Labelsを変更することは可能ですか?[Kendo-UI]です。
-
[解決済み] Jestを使用して単一のテストを実行するにはどうすればよいですか?
-
[解決済み] Jestを使用して1つのファイルをテストするにはどうすればよいですか?
-
[解決済み] ページロード後にJavaScriptを実行させるには?
-
[解決済み] Jestを使用してES6モジュールのインポートをモックするにはどうすればよいですか?
-
[解決済み】 `throw new Error` と `throw someObject` の違いは何ですか?
-
[解決済み】JestでESLintを使用する方法
-
[解決済み】Jestでモックデートを設定するにはどうすればいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】パッシブイベントリスナー内部でpreventDefaultができない
-
[解決済み】JavaScriptのisset()に相当するもの
-
[解決済み】webpack: モジュールが見つかりません。Error: 解決できない(相対パスで)
-
[解決済み】Google Conversionsが動作しない - スクリプトが読み込まれない
-
[解決済み】「Uncaught TypeError: Chromeで "Illegal invocation "が発生する。
-
[解決済み】エラー:リスン EACCES 0.0.0.0:80 OSx Node.js
-
[解決済み】JavaScriptで相対URLへのリダイレクトを行う
-
[解決済み】TypeError: AngularJSで未定義のプロパティ'get'を読み取れない
-
[解決済み】JavaScriptで関数が存在するかどうかを確認する方法は?
-
[解決済み】react router v^4.0.0 Uncaught TypeError: 未定義のプロパティ'location'を読み取れない