【发布时间】:2018-01-21 08:32:23
【问题描述】:
我真的很挣扎,所以请任何形式的帮助都非常感谢....
我有一个导出类的 ExternalDependency 模块。
TestSubject 是另一个类模块。
当 TestSubject 将被实例化时,一个 ExternalDependency 实例将被复合到 this 中。
出于测试目的,我想选择性地在模拟版本和真实版本的 ExternalDependency 类之间进行交换。
ExternalDependency.js
module.exports = class ExternalDependency {
constructor () {
this.isMocked = false
}
}
TestSubject.js
const ExternalDependency = require('./ExternalDependency')
module.exports = class TestSubject {
constructor () {
this.externalDependency = new ExternalDependency()
}
isExternalDependencyMocked () {
return this.externalDependency.isMocked
}
}
Test.js
const TestSubject = require('./TestSubject')
const MockedExternalDependency = class ExternalDependency {
constructor () {
this.isMocked = true
}
}
describe ('TestSubject', () => {
it ('will require and instantiate the real ExternalDependency', () => {
const testSubject = new TestSubject()
expect(testSubject.isExternalDependencyMocked()).toEqual(false)
})
it ('or the mocked one here', () => {
jest.mock('./ExternalDependency', MockedExternalDependency)
// Failing with:
// babel-plugin-jest-hoist: The second argument
// of `jest.mock` must be a function.
const testSubject = new TestSubject()
expect(testSubject.isExternalDependencyMocked()).toEqual(true)
})
it ('and back to the real', () => {
jest.unmock('./ExternalDependency')
const testSubject = new TestSubject()
expect(testSubject.isExternalDependencyMocked()).toEqual(false)
})
})
好的,我知道这是错误的。
但是,我怎样才能实现类似的行为???
【问题讨论】:
标签: javascript unit-testing mocking jestjs