【问题标题】:Mock the return value of an imported function in Typescript with Jest用 Jest 模拟 Typescript 中导入函数的返回值
【发布时间】:2020-08-04 14:09:43
【问题描述】:

我有一个函数,我们称它为 generateName,正如你所猜到的,它会生成一个名称。问题是每次运行测试时都会生成一个新名称。

在我的一个测试中,我断言使用包含此名称的对象调用函数。但是,名称一直在变化。我可以检查该对象是否具有属性名称,但我并不想这样做。

我的想法是我可以模拟 generateName 函数的返回值并做这样的事情

Import { generateName } from ‘libs/generateName’

jest.fn(generateName).mockResolvedValue ( ‘hello’ )

expect ( spy ).toHaveBeenCalledWith ( 
      expect.objectContaining ( {
        name: 'houses',
      } )
)

【问题讨论】:

    标签: javascript typescript unit-testing testing jestjs


    【解决方案1】:

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

    例如 generateName.ts:

    export async function generateName() {
      const name = Math.random() + '';
      return name;
    }
    

    main.ts:

    import { generateName } from './generateName';
    
    export function main() {
      return generateName();
    }
    

    main.test.ts:

    import { main } from './main';
    import { generateName } from './generateName';
    
    jest.mock('./generateName', () => {
      return {
        generateName: jest.fn(),
      };
    });
    
    describe('61350152', () => {
      it('should pass', async () => {
        (generateName as jest.MockedFunction<typeof generateName>).mockResolvedValueOnce('hello');
        const actual = await main();
        expect(actual).toBe('hello');
      });
    });
    

    带有覆盖率报告的单元测试结果:

     PASS  stackoverflow/61350152/main.test.ts (28.524s)
      61350152
        ✓ should pass (6ms)
    
    ----------|---------|----------|---------|---------|-------------------
    File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
    ----------|---------|----------|---------|---------|-------------------
    All files |     100 |      100 |     100 |     100 |                   
     main.ts  |     100 |      100 |     100 |     100 |                   
    ----------|---------|----------|---------|---------|-------------------
    Test Suites: 1 passed, 1 total
    Tests:       1 passed, 1 total
    Snapshots:   0 total
    Time:        31.98s
    

    【讨论】:

      猜你喜欢
      • 2020-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-17
      • 2020-03-31
      • 2022-10-24
      • 2022-07-22
      • 1970-01-01
      相关资源
      最近更新 更多