【发布时间】:2018-04-01 23:45:41
【问题描述】:
我有一个测试,我试图在两种不同的情况下模拟一个组件。当我使用jest.fn。看起来第一个测试只是从第二个测试中获取值。
describe('tests', () => {
let sampleArray = new Array()
Array.prototype.test = function() {
return this.innerArray()
}
describe('empty', () => {
sampleArray.innerArray = jest.fn(() => [])
it('testArray is empty', () => {
expect(sampleArray.test().length).toEqual(0)
})
})
describe('not empty', () => {
sampleArray.innerArray = jest.fn(() => ['test'])
it('testArray is not empty', () => {
console.log(sampleArray.innerArray())
expect(sampleArray.test().length).toEqual(1)
})
})
})
当我console.log 时,我从 innerArray 获得了我期望的数组,但它看起来好像没有使用它。
FAIL test/sample.test.js
tests
empty
✕ testArray is empty (8ms)
not empty
✓ testArray is not empty (4ms)
● tests › empty › testArray is empty
expect(received).toEqual(expected)
Expected value to equal:
0
Received:
1
编辑:如果我把它放在it 范围内,它就可以工作。但是为什么我不能在describe 范围内做呢?
describe('tests', () => {
let sampleArray = new Array()
Array.prototype.test = function() {
return this.innerArray()
}
describe('empty', () => {
it('testArray is empty', () => {
sampleArray.innerArray = jest.fn(() => [])
console.log(sampleArray.innerArray())
expect(sampleArray.test().length).toEqual(0)
})
})
describe('not empty', () => {
it('testArray is not empty', () => {
sampleArray.innerArray = jest.fn(() => ['test'])
expect(sampleArray.test().length).toEqual(1)
})
})//works
【问题讨论】:
-
在第一行,第一行,你的意思是
const sampleArray = new Array()吗? -
@LorenzoMarcon 如果没有参数,添加括号并不重要。
-
@Andrew 看起来
it函数是异步的。因此,在运行sampleArray.innerArray = jest.fn(() => [])之后,并没有运行相应的it回调,而是运行sampleArray.innerArray = jest.fn(() => ['test']),导致测试用例失败。 -
@Prakashsharma 出色的洞察力。但话虽如此,我该如何解决它,这样我就不必为每个测试用例在
it内重复相同的 5 行?
标签: javascript reactjs jestjs