当测试对象和被测试对象在不同的文件中时,模拟从其他文件导入的函数。

问题描述 投票:0回答:1
  • 我正在使用Jest测试框架。
  • 我打算测试服务 myServicemyService.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);
  });
});
javascript unit-testing testing jestjs
1个回答
1
投票

你可以使用 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.commrdulinreact-apollo-graphql-starter-kittreemasterstackoverflow61370607。

© www.soinside.com 2019 - 2024. All rights reserved.