web-dev-qa-db-ja.com

jest.fn()値はモック関数またはスパイでなければなりません

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

これが私のbutton-actions.js fileメソッドです。

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)

これを機能させるために実行する必要がある他のものはありますか?

11
me-me

ジャスミンのbackButtonActionsメソッドまたはJestのjest.spyOnメソッドを介して、spyOn関数をスパイする必要があります。

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

6
Mike Bell