我有一种情况,我需要创建一个调用函数并检查其返回值的测试。它返回一个对象,所以我必须遍历它并检查 100 个左右的值是否正确。如果其中一个失败了,我想知道是哪一个。
我无法弄清楚如何使用 vanilla Jest 执行此操作,以便测试是独立的,并且我会在失败时收到有意义的错误消息。
例如,我可以这样做:(伪代码来说明,不是实际代码)
describe('Test for function A', () => {
beforeAll('Create class instance', () => {
this.inst = new MyClass();
});
test('Call function with no parameters', () => {
const value = this.inst.run();
for (each key=value) {
expect(value).toBe(correct); // on failure, doesn't tell me the key, only the value
}
});
});
问题在于,如果 value
不是 correct
那么错误消息不是很有帮助,因为它没有告诉我 100 个值中的哪个有问题。我无法更改为
test.each()
因为那时我得到一个错误,说我已经嵌套了 test()
不允许的电话。如果我使用内部
test()
并更改父 test()
至describe()
然后代码变成这样:describe('Test for function A', () => {
beforeAll('Create class instance', () => {
this.inst = new MyClass();
});
describe('Call function with no parameters', () => {
const value = this.inst.run();
for (each value) {
test(`Checking ${value.name}`, () => {
expect(value).toBe(correct);
});
}
});
});
这会给我一个详细的错误消息,除了 this.inst.run()
在测试设置期间调用,在 this.inst
之前已由 beforeAll()
设置,所以它失败了。 (Jest 首先运行所有 describe()
block ,然后是 beforeAll()
,然后是 test()
。这意味着我首先在 this.inst.run()
block 中调用 describe()
,然后 beforeAll()
block 创建类实例。)有什么方法可以实现吗?有一个测试需要在所有子测试之间创建和共享一个对象,一个调用函数来获取该组数据的测试组,然后是组内的一堆测试?
最佳答案
可以,按照describe
的执行顺序是可以的和 test
block :
describe("Test for function A", () => {
this.inst = new MyClass();
afterAll("Create class instance", () => { //--> use this instead of beforeAll
this.inst = new MyClass();
});
test("Should be defined", () => {
//--> at least one test inside describe
expect(inst).toBeTruthy();
});
describe("Call function with no parameters", () => {
const value = this.inst.run();
test("Should be defined", () => {
//--> at least one test inside describe
expect(value).toBeTruthy();
});
for (/*...each value */) {
test(`Checking ${value.name}`, () => {
expect(value).toBe(correct);
});
}
});
});
关于javascript - 如何嵌套 Jest 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66453658/