开玩笑的报道说我的条件没有被覆盖,但它正在使用该代码
Jest coverage says my conditional isn't being covered, but it's using that code
我正在使用节点并开玩笑地进行测试。
我有这样的功能:
12 function replace(obj, key, data) {
13 if (!data) {
14 return;
15 }
16
17 if (!obj[key]) {
18 obj[key] = {};
19 }
20
21 obj[key] = deepmerge(obj[key], data);
22 }
这是我正在做的测试:
test('my test', () => {
let obj = { a: 1 };
expect(obj.b).not.toBeDefined();
replace(obj, 'b', {foo:"bar"});
expect(obj.b.foo).toBe("bar");
});
考试当然通过了。但无论我做什么,我的测试覆盖率都显示第 17 行未被覆盖。我可以离开它,但出于好奇,我想弄清楚 为什么 它不被视为涵盖(and/or 我该如何修复它)。有什么见解吗?
事实证明这是一个相当微妙的问题。
第 17 行测试如果密钥不存在于 obj
中会发生什么。结果是 all 我的测试都达到了那条线,这意味着 implicit else (当 key
does exist in obj
) 从未得到测试。
Jest 警告说 if(...)
的 other 分支没有被测试(隐含的 else)。但是,当然,因为它是隐式的,所以它不能指向行号。它必须指向创建隐式 else 的行。
修复只是为了测试 if
条件及其替代条件 else
。
我正在使用节点并开玩笑地进行测试。
我有这样的功能:
12 function replace(obj, key, data) {
13 if (!data) {
14 return;
15 }
16
17 if (!obj[key]) {
18 obj[key] = {};
19 }
20
21 obj[key] = deepmerge(obj[key], data);
22 }
这是我正在做的测试:
test('my test', () => {
let obj = { a: 1 };
expect(obj.b).not.toBeDefined();
replace(obj, 'b', {foo:"bar"});
expect(obj.b.foo).toBe("bar");
});
考试当然通过了。但无论我做什么,我的测试覆盖率都显示第 17 行未被覆盖。我可以离开它,但出于好奇,我想弄清楚 为什么 它不被视为涵盖(and/or 我该如何修复它)。有什么见解吗?
事实证明这是一个相当微妙的问题。
第 17 行测试如果密钥不存在于 obj
中会发生什么。结果是 all 我的测试都达到了那条线,这意味着 implicit else (当 key
does exist in obj
) 从未得到测试。
Jest 警告说 if(...)
的 other 分支没有被测试(隐含的 else)。但是,当然,因为它是隐式的,所以它不能指向行号。它必须指向创建隐式 else 的行。
修复只是为了测试 if
条件及其替代条件 else
。