最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Mock the return value of an imported function in Typescript with Jest - Stack Overflow

programmeradmin2浏览0评论

I have a function, lets call it generateName, which as you’ve guessed it, generates a name. The problem is that a new name is generated each time time a test is ran.

In one of my tests, I assert that a function is called with an object containing this name. However, the name keeps on changing. I could just check that the object has property name, but I don’t really want to do that.

My idea is that I can mock the return value of the generateName function and do something like this

Import { generateName } from ‘libs/generateName’

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

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

I have a function, lets call it generateName, which as you’ve guessed it, generates a name. The problem is that a new name is generated each time time a test is ran.

In one of my tests, I assert that a function is called with an object containing this name. However, the name keeps on changing. I could just check that the object has property name, but I don’t really want to do that.

My idea is that I can mock the return value of the generateName function and do something like this

Import { generateName } from ‘libs/generateName’

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

expect ( spy ).toHaveBeenCalledWith ( 
      expect.objectContaining ( {
        name: 'houses',
      } )
)
Share Improve this question edited Apr 22, 2020 at 2:56 Lin Du 103k136 gold badges334 silver badges566 bronze badges asked Apr 21, 2020 at 18:06 ollie yollie y 311 gold badge1 silver badge2 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 6

You can use jest.mock(moduleName, factory, options) to mock libs/generateName module.

E.g. 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');
  });
});

unit test results with coverage report:

 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
发布评论

评论列表(0)

  1. 暂无评论