Макет новой функции () с Jest - PullRequest
       22

Макет новой функции () с Jest

0 голосов
/ 17 октября 2018

У меня возникают проблемы при попытке смоделировать модуль с конструктором

// code.js
const ServiceClass = require('service-library');
const serviceInstance = new ServiceClass('some param');
exports.myFunction = () => {
  serviceInstance.doSomething();
};

И тестовый код:

// code.test.js
const ServiceClass = require('service-library');
jest.mock('service-library');
const {myFunction} = require('../path/to/my/code');

test('check that the service does something', () => {
  // ????
});

Это не похоже на пример документации Mocking Modules потому что вам нужно создать экземпляр модуля после его импорта.И не похоже на Mocking a Function.

Как я могу смоделировать эту doSomething() функцию во время тестирования?

Для справки, я пытаюсь смоделировать @google-cloud/* пакеты здесь.И у меня есть несколько проектов, которые могли бы воспользоваться этим.

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

После @ andreas-köberle решения, которое я смогла высмеять @google-cloud/bigquery примерно так:

// mock bigquery library
const BigQuery = require('@google-cloud/bigquery');
jest.mock('@google-cloud/bigquery', () => jest.fn());
const load = jest.fn(() => ({'@type': 'bigquery#load_job'}));
const table = jest.fn(() => ({load}));
const dataset = jest.fn(() => ({table}));
BigQuery.mockImplementation(() => ({dataset}));

// mock cloud storage library
const {Storage} = require('@google-cloud/storage');
jest.mock('@google-cloud/storage');
const file = jest.fn(name => ({'@type': 'storage#file', name}));
const bucket = jest.fn(() => ({file}));
Storage.mockImplementation(() => ({bucket}));

Я оставляю это здесь в качестве ссылки на случай, если кто-то еще что-то погуглитаналогичный.Но чтобы прояснить это, это всего лишь конкретизация для @ andreas-köberle ответа

0 голосов
/ 17 октября 2018

Вам нужно сначала смоделировать весь модуль, чтобы получить шутку.Затем импортируйте в свой тест и установите макет для функции, которая возвращает объект, содержащий шпиона, для doSomething.Для теста существует разница между классом с именем new и функцией с именем new.

import ServiceLibrary from 'service-library'

jest.mock( 'service-library', () => jest.fn())

const doSomething = jest.fn()
ServiceLibrary.mockImplementation(() => ({doSomething}))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...