web-dev-qa-db-fra.com

Mock.mockImplementation () ne fonctionne pas

J'ai une classe de service

Service.js

class Service {
}
export default new Service();

Et j'essaie de fournir une implémentation factice pour cela. Si j'utilise quelque chose comme ça:

jest.mock('./Service', () => { ... my mock stuff });

Cela fonctionne bien, mais je ne peux pas accéder aux variables déclarées en dehors de la maquette, ce qui est un peu limitant, car j'aimerais reconfigurer le retour de la maquette, etc. 

J'ai essayé ceci (inspiré de cet autre article de StackOverflow: Le service simulé avec Jest provoque "La fabrique de modules de jest.mock () n'est pas autorisée à faire référence à des variables hors de la portée" erreur )

import service from './Service';

jest.mock('./Service', () => jest.fn);

service.mockImplementation(() => {
    return { ... mock stuff }
);

Malheureusement, lorsque j'essaie de l'exécuter, j'obtiens l'erreur ci-dessous:

TypeError: _Service2.default.mockImplementation is not a function
13
Janos

Le mock est égal à jest.fn. Vous devez appeler jest.fn pour créer une fonction fausse.

Donc ça:

jest.mock('./Service', () => jest.fn);

Devrait être:

jest.mock('./Service', () => jest.fn());
8
deleteme

Vous devez stocker votre composant fictif dans une variable avec un nom préfixé par "fictif" et vous assurer de renvoyer un objet avec une propriété par défaut lors de l'importation du service par défaut dans votre fichier "main.js".

// Service.js
class Service {
}
export default new Service();

// main.test.js (main.js contains "import Service from './Service';")

const mockService = () => jest.fn();

jest.mock('./Service', () => {
    return {
        default: mockService
    }
});
0
maxletou