繁体   English   中英

我可以在笑话单元中模拟进口的 function

[英]can I mock an imported function in jest unit

我有这样的代码

import fun from '../../../example';
export async function init (props:any){
   if (fun()){
      doSomething();
   }
}

我正在为上面的这段代码创建单元测试,但我实际上只想在文件中模拟 fun 的实现,因为我无法在其原始文件中更改 fun

您可以使用jest.mock(moduleName, factory, options)来模拟../../../example模块。

例如

index.ts

import fun from './example';

export async function init(props: any) {
  if (fun()) {
    console.log('doSomething');
  }
}

example.ts

export default function fun() {
  console.log('real implementation');
  return false;
}

index.test.ts

import { init } from './';
import fun from './example';
import { mocked } from 'ts-jest/utils';

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

describe('63166775', () => {
  it('should pass', async () => {
    expect(jest.isMockFunction(fun)).toBeTruthy();
    const logSpy = jest.spyOn(console, 'log');
    mocked(fun).mockReturnValueOnce(true);
    await init({});
    expect(logSpy).toBeCalledWith('doSomething');
    expect(fun).toBeCalledTimes(1);
    logSpy.mockRestore();
  });
});

单元测试结果:

 PASS  stackoverflow/63166775/index.test.ts (13.298s)
  63166775
    ✓ should pass (33ms)

  console.log
    doSomething

      at CustomConsole.<anonymous> (node_modules/jest-environment-enzyme/node_modules/jest-mock/build/index.js:866:25)

----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------|---------|----------|---------|---------|-------------------
All files |     100 |       50 |     100 |     100 |                   
 index.ts |     100 |       50 |     100 |     100 | 4                 
----------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        15.261s

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM