web-dev-qa-db-fra.com

La valeur jest.fn () doit être une fonction factice ou un espion

J'ai une fonction dans un module appelé bouton-actions qui est appelée lorsqu'un utilisateur clique sur un bouton de retour. Je veux tester directement la méthode backButtonActions mais j'ai besoin de simuler les méthodes LeaveApp et displayById à l'intérieur de backButtonActions qui sont appelées.

Voici ma méthode de fichier 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;
    }
}

Je suis nouveau dans les tests, donc il se peut que je manque quelque chose de très simple. Ci-dessous est mon fichier 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");
    });
})

Lorsque j'exécute le test ci-dessus, j'obtiens l'erreur suivante.

● Actions du bouton ›backButtonActions nécessite une chaîne de" étape 1 "ou" étape 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)

Y a-t-il autre chose que je devrais exécuter pour que cela fonctionne?

11
me-me

Vous devez espionner la fonction backButtonActions, soit via la méthode spyOn de jasmine, soit via la méthode jest.spyOn De Jest

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

6
Mike Bell