Jest-1つのテストスイートでモジュールを複数回テスト

サイモン

TypeScriptモジュールがあり(これはJSにも影響すると思うので、関係ないはずです)、持っているモジュールをテストしようとしています。モジュールは外部ファイルから大量のデータをインポートし、変数に基づいて返されるデータを選択します。

その変数を更新しrequire、モジュールを再作成して、1つのファイルでさらにテストを実行するいくつかのテストを実行しようとしています。しかし、私の問題はrequire、ファイルのが1回しか実行されないことです。キャッシュされていると思います。requireテスト間でキャッシュしないように、またはキャッシュをクリアするようにJestの関数に指示することは可能ですか?

これが私が達成しようとしていることのいくつかのストリップバックコードです:

module.ts

import { getLanguage } from "utils/functions";

import * as messagesEn from "resources/translations/en";
import * as messagesFr from "resources/translations/fr";

// Determine the user's default language.
const language: string = getLanguage();

// Set messages based on the language.
let messages: LocaleMessages = messagesEn.default;
if (languageWithoutRegionCode === "fr") {
    messages = messagesFr.default;
}

export { messages, language };

test.ts

import "jest";

// Mock the modules
const messagesEn = { "translation1": "English", "translation2": "Words" };
const messagesFr = { "translation1": "Francais", "translation2": "Mots" };
const getLangTest = jest.fn(() => "te-ST");
const getLangEn = jest.fn(() => "en-GB");
const getLangFr = jest.fn(() => "fr-FR");
jest.mock("resources/translations/en", () => ({"default": messagesEn}));
jest.mock("resources/translations/fr", () => ({"default": messagesFr}));
jest.mock("utils/functions", () => ({
        getLanguage: getLangTest
    })
);

describe("Localisation initialisation", () => {
    it("Sets language", () => {
        const localisation = require("./localisation");
        expect(getLangTest).toHaveBeenCalled();
        expect(localisation.language).toEqual("te-ST");
        expect(localisation.messages).toEqual(messagesEn);
    });

    it("Sets english messages", () => {
        // THIS GETS THE MODULE FROM THE CACHE
        const localisation = require("./localisation");
        expect(getLangEn).toHaveBeenCalled();
        expect(localisation.language).toEqual("en-GB");
        expect(localisation.messages).toEqual(messagesEn);
    });

    it("Sets french messages", () => {
        // THIS GETS THE MODULE FROM THE CACHE
        const localisation = require("./localisation");
        expect(getLangFr).toHaveBeenCalled();
        expect(localisation.language).toEqual("fr-FR");
        expect(localisation.messages).toEqual(messagesFr);
    });
});

"utils/functions"モックを更新する必要があるため、2番目と3番目のテストはとにかく機能しないことを認識しています。問題は、module.tsのコードが1回しか実行されないことです。

サイモン

だから、DiscordのJestの人々に感謝します。jest.resetModules()関数を使用して、キャッシュからモジュールを実際にクリアすることができます。

したがって、私のtest.tsファイルは次のようになります。

describe("Localisation initialisation", () => {
    beforeEach(() => {
        jest.resetModules();
    });

    it("Sets language", () => {
        const localisation = require("./localisation");
        // Perform the tests
    });

    it("Sets english messages", () => {
        const localisation = require("./localisation");
        // Perform the tests
    });

    it("Sets french messages", () => {
        const localisation = require("./localisation");
        // Perform the tests
    });
});

beforeEach()呼び出しjest.resetModules()は、モジュール内のコードを再実行していることを確認します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Jestで1つのテストファイルのみのモジュールをモックする方法は?

分類Dev

JestでES6モジュールをテストする

分類Dev

jestを使用したモジュール機能のテスト

分類Dev

Jest-SyntaxError:モジュールの外部でimportステートメントを使用できません

分類Dev

Jest Testing React Nativeは、モジュールの外部でimportステートメントを使用できません

分類Dev

Jestテストのモジュールパスを指定するにはどうすればよいですか?

分類Dev

すべてのテストファイルのJestモックユーザーモジュール

分類Dev

「SyntaxError:モジュールの外部でインポートステートメントを使用できません」Babel、Jest、およびwebpackで

分類Dev

Jestユニットテスト-SyntaxError:モジュールの外部でimportステートメントを使用できません

分類Dev

Jestのopenlayersモジュールを使用してコードをテストできません

分類Dev

Jestはモジュールを変換しません-SyntaxError:モジュールの外部でimportステートメントを使用できません

分類Dev

NPMパッケージモジュールからの `ReferenceError`で失敗するJestユニットテスト

分類Dev

Jestを使用してサードパーティモジュール内の匿名関数をテストする

分類Dev

jest mock:特定のテストで実際のモジュールを使用する方法は?

分類Dev

特定のテストのためにモジュールから特定の関数をモックする方法(Jest)

分類Dev

Jest-複数のテストファイル用の1つの関数モックファイル

分類Dev

テストファイルJestで1つのテストをスキップする

分類Dev

ReactNativeでのJestテスト/モックモーメント

分類Dev

モジュールを使用せずに、複数のテストにわたってJestでjsdomを構成する

分類Dev

Jestでテストを実行するときにuuidモジュールを使用できません

分類Dev

React Native Jestテストでプッシュ通知ネイティブモジュールをモックする方法は?

分類Dev

ブラウザコンソールでのJestユニットテストモジュールのエクスポートエラー

分類Dev

jestで1つのテストファイルを実行する

分類Dev

jestテストケース+ VueJS + Jestで$ルートを変更する方法

分類Dev

JestでのXHRテスト

分類Dev

Vue JsでJestテストを実行すると、「SyntaxError:モジュールの外部でインポートステートメントを使用できません」

分類Dev

クエリ文字列モジュールのstringifyがJestテストで期待どおりに機能しない

分類Dev

Jestでモジュールパターンを明らかにするJavaScriptのユニットテストを書く方法は?

分類Dev

マングースモデルのインスタンス化をテストするJest

Related 関連記事

  1. 1

    Jestで1つのテストファイルのみのモジュールをモックする方法は?

  2. 2

    JestでES6モジュールをテストする

  3. 3

    jestを使用したモジュール機能のテスト

  4. 4

    Jest-SyntaxError:モジュールの外部でimportステートメントを使用できません

  5. 5

    Jest Testing React Nativeは、モジュールの外部でimportステートメントを使用できません

  6. 6

    Jestテストのモジュールパスを指定するにはどうすればよいですか?

  7. 7

    すべてのテストファイルのJestモックユーザーモジュール

  8. 8

    「SyntaxError:モジュールの外部でインポートステートメントを使用できません」Babel、Jest、およびwebpackで

  9. 9

    Jestユニットテスト-SyntaxError:モジュールの外部でimportステートメントを使用できません

  10. 10

    Jestのopenlayersモジュールを使用してコードをテストできません

  11. 11

    Jestはモジュールを変換しません-SyntaxError:モジュールの外部でimportステートメントを使用できません

  12. 12

    NPMパッケージモジュールからの `ReferenceError`で失敗するJestユニットテスト

  13. 13

    Jestを使用してサードパーティモジュール内の匿名関数をテストする

  14. 14

    jest mock:特定のテストで実際のモジュールを使用する方法は?

  15. 15

    特定のテストのためにモジュールから特定の関数をモックする方法(Jest)

  16. 16

    Jest-複数のテストファイル用の1つの関数モックファイル

  17. 17

    テストファイルJestで1つのテストをスキップする

  18. 18

    ReactNativeでのJestテスト/モックモーメント

  19. 19

    モジュールを使用せずに、複数のテストにわたってJestでjsdomを構成する

  20. 20

    Jestでテストを実行するときにuuidモジュールを使用できません

  21. 21

    React Native Jestテストでプッシュ通知ネイティブモジュールをモックする方法は?

  22. 22

    ブラウザコンソールでのJestユニットテストモジュールのエクスポートエラー

  23. 23

    jestで1つのテストファイルを実行する

  24. 24

    jestテストケース+ VueJS + Jestで$ルートを変更する方法

  25. 25

    JestでのXHRテスト

  26. 26

    Vue JsでJestテストを実行すると、「SyntaxError:モジュールの外部でインポートステートメントを使用できません」

  27. 27

    クエリ文字列モジュールのstringifyがJestテストで期待どおりに機能しない

  28. 28

    Jestでモジュールパターンを明らかにするJavaScriptのユニットテストを書く方法は?

  29. 29

    マングースモデルのインスタンス化をテストするJest

ホットタグ

アーカイブ