【问题标题】:Reset Jest mock of id generator on every test在每次测试中重置 id 生成器的 Jest 模拟
【发布时间】:2020-02-02 02:40:04
【问题描述】:

我正在尝试模拟 id 生成功能。 我的generateIdsSet.js 文件的内容是:

import nanoid from 'nanoid/generate'

const generateId = (): string => {
  return nanoid('1234567890abcdefghijklmnopqrstuvwxyz', 5)
}

export const generateIdsSet = (setLength) => {
  const setIds = []

  for (let i = 0; i < setLength; i++) {
    setIds.push(generateId())
  }

  return setIds
}

generateIdsSet 的模拟文件generateIdsSet.spec.js 中,我需要创建可预测的ID 数组。我想出了那个实现:

import { generateIdsSet } from './generateIdsSet.js'

jest.mock('nanoid/generate', () => {
  let value = 0

  return () => String(++value)
})

describe('generateIdsSet', () => {
  it('One element', () => {
    expect(generateIdsSet(1)).toEqual(['1'])
  })

  it('Four elements', () => {
    expect(generateIdsSet(4)).toEqual(['1', '2', '3', '4'])
  })

  ....
})

一切正常,只是在每个测试计数器上都没有重置为 1,并且每次调用都保持递增。

也许这是我明显想念的东西,但我无法弄清楚。我将不胜感激。

【问题讨论】:

    标签: javascript unit-testing testing ecmascript-6 jestjs


    【解决方案1】:

    当您想模拟 ES 导入时,您还需要在测试文件中导入模块。有多种方法可以做到这一点,但最简单的两种方法是:

    • 使用autoMock 并在测试旁边创建一个__mock__ 目录(添加样板文件)
    • 在文件中导入要模拟的模块(更简单)
    import nanoid from 'nanoid/generate'
    import { generateIdsSet } from './generateIdsSet.js'
    
    jest.mock('nanoid')
    
    nanoid.mockImplementation(() => {
      let value = 0
    
      return () => String(++value)
    });
    
    afterAll(() => {
      // don't forget to restore when done!
      nanoid.mockRestore()
    });
    
    describe('generateIdsSet', () => {
      it('One element', () => {
        expect(generateIdsSet(1)).toEqual(['1'])
      })
    
      it('Four elements', () => {
        expect(generateIdsSet(4)).toEqual(['1', '2', '3', '4'])
      })
    
      ....
    })
    

    更多嘲讽可以在in this medium article找到(注意,我不是作者)。

    【讨论】:

      猜你喜欢
      • 2018-05-28
      • 2022-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-27
      • 2021-03-29
      • 1970-01-01
      • 2021-04-19
      相关资源
      最近更新 更多