1. ホーム
  2. jquery

[解決済み] jest.fn()の値はモック関数またはスパイである必要があります。

2022-03-13 13:12:15

質問

button-actionsというモジュールに、ユーザーが戻るボタンをクリックしたときに呼び出される関数があります。backButtonActionsメソッドを直接テストしたいのですが、呼び出されるbackButtonActions内のleaveAppとdisplayByIdメソッドをモックアップする必要があります。

以下は私の button-actions.js のファイルメソッドです。

export function backButtonActions( label, page ){      //, page
    console.log("LABEL = ", label, "  page = ", page);
    switch( label ){
        case 'step1':
            page.leaveApp();
            break;
        case 'step2':
            page.displayById();
            break;
    }
}

私はテストに慣れていないので、何かとても簡単なことを見逃しているかもしれません。 以下は私の test.js ファイル

   window.$ = require('jquery');
    import {backButtonActions} from '../button-actions';


    describe('Button Actions', () => {

        const page = {}

        beforeEach(() => {

            page.leaveApp = jest.fn(() => "leave");
            page.displayById = jest.fn(() => "Display");

            document.body.innerHTML =
                '<div>' +
                '  <button class="btn-back" />' +
                '</div>';

                 $('.btn-back').click((event, label) =>{
                     backButtonActions( label, page );
                 });




    });
    it('backButtonActions requires a string of either "step1" or "step2"', () => {

        $('.btn-back').trigger('click', 'step1');

         expect(backButtonActions).toBeCalled();
         expect(backButtonActions).toBeCalledWith("step1" || "step2");
    });
})

上記のテストを実行すると、次のようなエラーが発生します。

ボタンアクション ' backButtonActions は、以下のいずれかの文字列を必要とします。 ステップ1" またはステップ2"

expect(jest.fn())[.not].toBeCalled()

jest.fn() value must be a mock function or spy.
Received:
  function: [Function backButtonActions]

  at Object.<anonymous> (test/js/spec/create/button-actions.test.js:64:50)

これを動作させるために他に何か実行すべきことはありますか?

解決方法は?

をスパイする必要があります。 backButtonActions 関数は、jasmineの spyOn メソッドを使うか、Jest の jest.spyOn メソッド

https://facebook.github.io/jest/docs/jest-object.html#jestspyonobject-methodname