Javascript Jest模拟-将值插入测试文件

Javascript Jest模拟-将值插入测试文件,javascript,unit-testing,testing,jestjs,Javascript,Unit Testing,Testing,Jestjs,我在将值插入测试文件时遇到问题: import device from '../device' let execute = () => { if (device.isAndroid()) { return true else { return false } } 现在查看测试文件: jest.mock('../device') import device from '../device' describe('when the device is Andro

我在将值插入测试文件时遇到问题:

import device from '../device'

let execute = () => {
  if (device.isAndroid()) {
    return true
  else {
    return false
  }
}
现在查看测试文件:

jest.mock('../device')
import device from '../device'

describe('when the device is Android', () => {
  let device

  beforeEach(() => {
    device = jest.fn().mockImplementation(() => {
      return { 
        isAndroid: () => { return true } 
      }
    })
  })

  it('returns true', () => {
    let results = execute()
    expect(result).toEqual(true)
  })
})
测试失败并返回false。我做错了什么?

您需要使用jest spy模拟“../device”,并在其上模拟实现:

jest.mock('../device', ()=>{return {isAndroid: jest.fn()}})
import device from '../device'

describe('when the device is Android', () => {

  beforeEach(() => {
    device.isAndroid.mockImplementation(() => true)
  })

  it('returns true', () => {
    let results = execute()
    expect(result).toEqual(true)
  })
})

谢谢你的回答,但是我得到了以下错误:TypeError:device.isAndroid不是一个函数-在executesrc/execute.js。TypeError:无法读取未定义的-at对象的属性“mockImplementation”。src/test/execute.spec.js有什么想法吗?不确定,更新了我的答案,将模拟直接移动到isandroid。首先,你是个天才!!我让它工作了。请更新以上答案,我会将其标记为正确,以确保其他人不会误入歧途。第一行应该是jest.mock'../device',=>{return{isAndroid:jest.fn}}。另外,删除let device,因为import语句已经定义了设备。这使它起作用。