开玩笑模拟节点配置

mock node config with jest

我目前是第一次在jest和nodejs中介绍自己。 我面临的问题是我必须从 nodejs 配置中模拟两个不同的值。

jest.mock('config')
mockConfigTtl = require('config').get.mockReturnValue(100);
mockConfigScheduling = require('config').get.mockReturnValue('* * * * *');

问题是第二个 mockReturnValue 覆盖了第一个。 是否有可能将展位模拟彼此分开?

也许像这样:

jest.mock('config')
mockConfigTtl = require('config').get('firstKey').mockReturnValue(100);
mockConfigScheduling = require('config').get('secondKey').mockReturnValue('* * * * *');

由于您希望确保您的实现适用于所有可能的配置,我认为最好在不同的描述块中设置多个测试场景,并在每个场景中使用 mockReturnValue 并执行您的实现。

示例:

const config = require('config');

jest.mock('config')

describe('my implementation', () => {
  describe('with firstKey 100', () => {
    let result
    beforeAll(() => {
      config.get.mockReturnValue(100)
      result = myImplementation()
    })

    it('should result in ...', () => {
      // your assertion here
    })
  })

  describe('with firstKey different than 100', () => {
    let result
    beforeAll(() => {
      config.get.mockReturnValue(1000)
      result = myImplementation()
    })

    it('should result in ...', () => {
      // your assertion here
    })
  })
})

或者如果您想测试更多配置,您可以使用 describe.each

const config = require('config');

jest.mock('config')

describe('my implementation', () => {
  describe.each([
    100,
    200,
    300
  ])('with firstKey: %d', (firstKey) => {
    let result
    beforeAll(() => {
      config.get.mockReturnValue(firstKey)
      result = myImplementation()
    })

    it('should match the snapshot',  () => {
      expect(result).toMatchSnapshot()
    })
  })
})

这将生成一个快照,其中包含您的实施结果,如果它发生变化,除非更新快照,否则测试将失败