Насмешливая импортированная функция из другого файла, когда испытуемый и испытуемый находятся в разных файлах - PullRequest
0 голосов
/ 22 апреля 2020
  • Я использую среду тестирования Jest.
  • Я собираюсь протестировать сервис myService из файла myService.js.
  • Я создаю отдельный файл для тестов, myService.spec.js в той же папке.
  • Метод myService.myMethod() использует хелпер myHelper() из helpers.js файла.

Есть ли возможность каким-либо образом насмехаться над этим myHelper()?

|
 -- myService.js
 -- myService.spec.js
 -- myHelper.js

myService.js:

import { myHelper } from './myHelper.js';

export class MyService {
  myMethod() {
    const myVar = myHelper(42); // I need to mock this
  }
}

myService.spec.js:

import { MyService } from './myService';

describe('my test', () => {
  it('should work properly', () => {
    expect(myService.myMethod()).toBe(24);
  });
});

1 Ответ

1 голос
/ 23 апреля 2020

Вы можете использовать jest.mock (moduleName, factory, options) для макета myHelper модуля и myHelper функции.

Например myService.js:

import { myHelper } from './myHelper';

export class MyService {
  myMethod() {
    const myVar = myHelper(42);
    return myVar;
  }
}

myHelper.js:

export function myHelper(n) {
  return n;
}

myService.test.js:

import { MyService } from './myService';
import { myHelper } from './myHelper';

jest.mock('./myHelper', () => {
  return {
    myHelper: jest.fn(),
  };
});

describe('my test', () => {
  it('should work properly', () => {
    myHelper.mockReturnValueOnce(24);
    const myService = new MyService();
    expect(myService.myMethod()).toBe(24);
  });
});

Результаты модульного теста со 100% покрытием:

 PASS  stackoverflow/61370607/myService.test.js (13.137s)
  my test
    ✓ should work properly (3ms)

--------------|---------|----------|---------|---------|-------------------
File          | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
--------------|---------|----------|---------|---------|-------------------
All files     |     100 |      100 |     100 |     100 |                   
 myService.js |     100 |      100 |     100 |     100 |                   
--------------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        15.028s

исходный код: https://github.com/mrdulin/react-apollo-graphql-starter-kit/tree/master/stackoverflow/61370607

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...