强制模拟模块在测试中抛出错误

我想测试的函数中有一个 try/catch 块。这两个函数调用同一个execute函数,如果它抛出错误,它们将被捕获。我的测试是在顶部附近模拟模块的地方设置的,然后我可以验证该 jest 函数被调用了多少次。


我似乎无法弄清楚的是如何强制 execute在第二次测试中抛出错误,然后返回到默认的模拟实现。我试过在个人测试中重新分配 jest.mock 但它似乎不起作用。


import {execute} from '../src/execute'


jest.mock('../src/execute', () => ({

  execute: jest.fn()

}))


describe('git', () => {

  afterEach(() => {

    Object.assign(action, JSON.parse(originalAction))

  })


  describe('init', () => {

    it('should stash changes if preserve is true', async () => {

      Object.assign(action, {

        silent: false,

        accessToken: '123',

        branch: 'branch',

        folder: '.',

        preserve: true,

        isTest: true,

        pusher: {

          name: 'asd',

          email: 'as@cat'

        }

      })


      await init(action)

      expect(execute).toBeCalledTimes(7)

    })

  })


  describe('generateBranch', () => {

    it('should execute six commands', async () => {

       jest.mock('../src/execute', () => ({

         execute: jest.fn().mockImplementation(() => {

           throw new Error('throwing here so. I can ensure the error parsed properly');

         });

      }))


      Object.assign(action, {

        silent: false,

        accessToken: '123',

        branch: 'branch',

        folder: '.',

        pusher: {

          name: 'asd',

          email: 'as@cat'

        }

      })

      

      // With how this is setup this should fail but its passing as execute is not throwing an error

      await generateBranch(action)

      expect(execute).toBeCalledTimes(6)

    })

  })

})


婷婷同学_
浏览 85回答 1
1回答

HUWWW

jest.mockinshould execute six commands不影响../src/execute模块,因为它已经在顶层导入。jest.mock在顶层已经execute用 Jest 间谍进行了嘲笑。最好使用Once实现来不影响其他测试:it('should execute six commands', async () => {     execute.mockImplementationOnce(() => {       throw new Error('throwing here so. I can ensure the error parsed properly');     });     ...此外,模拟应该被强制为 ES 模块,因为execute它被命名为 import:jest.mock('../src/execute', () => ({  __esModule: true,  execute: jest.fn()}))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript