为什么循环描述块会导致失败?
Why do looped describe blocks cause failures?
我想用 jest 来测试同一事物的不同实现。界面始终相同,因此测试也始终完全相同。
为了避免重复,我尝试将整个 dontMock 和 describe 内容放入一个循环中,如下所示:
var implementations = [ 'first', 'second', 'third' ]
for(i in implementations) {
var name = implementations[i],
path = "../js/components/fancy_" + name
jest.dontMock(path)
func = require(path)
describe(name + " implementation", function() {
it("does things", function() {
expect(func()).toBe("one with the world")
})
})
}
只要 implementations 数组只有一个元素,就可以了。一旦我添加更多,来自某些实现的失败也会显示为其他实现的失败。如果所有实施都通过,我将获得绿色测试。
我还尝试将 dontMock 部分移到一个单独的循环中,但这没有帮助。
我认为 describe()
是异步运行的,而不是你的 for .. in
循环。所以希望解决方案应该是将每个描述调用包装在 IIFE 中:
var implementations = [ 'first', 'second', 'third' ]
for(i in implementations) {
var name = implementations[i],
path = "../js/components/fancy_" + name
jest.dontMock(path)
func = require(path)
(function(func) {
describe(name + " implementation", function() {
it("does things", function() {
expect(func()).toBe("one with the world")
})
})
})(func)
}
这看起来不太干净,您可能应该重新组织代码以避免出现这种情况。
我想用 jest 来测试同一事物的不同实现。界面始终相同,因此测试也始终完全相同。
为了避免重复,我尝试将整个 dontMock 和 describe 内容放入一个循环中,如下所示:
var implementations = [ 'first', 'second', 'third' ]
for(i in implementations) {
var name = implementations[i],
path = "../js/components/fancy_" + name
jest.dontMock(path)
func = require(path)
describe(name + " implementation", function() {
it("does things", function() {
expect(func()).toBe("one with the world")
})
})
}
只要 implementations 数组只有一个元素,就可以了。一旦我添加更多,来自某些实现的失败也会显示为其他实现的失败。如果所有实施都通过,我将获得绿色测试。
我还尝试将 dontMock 部分移到一个单独的循环中,但这没有帮助。
我认为 describe()
是异步运行的,而不是你的 for .. in
循环。所以希望解决方案应该是将每个描述调用包装在 IIFE 中:
var implementations = [ 'first', 'second', 'third' ]
for(i in implementations) {
var name = implementations[i],
path = "../js/components/fancy_" + name
jest.dontMock(path)
func = require(path)
(function(func) {
describe(name + " implementation", function() {
it("does things", function() {
expect(func()).toBe("one with the world")
})
})
})(func)
}
这看起来不太干净,您可能应该重新组织代码以避免出现这种情况。