如果我使用toEqual(),我希望以下示例测试失败,但它通过了:
it('sample test to check toEqual and toBe', () => {
const expectedAction = {test: '123', value: undefined};
const actualAction = {test: '123'};
expect(expectedAction).toEqual(actualAction);
})
如果我使用.toBe(),相同的测试将失败。但是,如果我像这样修复测试用例:
it('sample test to check toEqual and toBe', () => {
const expectedAction = {test: '123', value: '123'};
const actualAction = {test: '123', '123'};
expect(expectedAction).toBe(actualAction);
});
它再次没有说“比较值没有视觉差异”。
行为是否正确?如何修改我的测试用例以使其无法正确失败。
答案 0 :(得分:1)
第一个通过原因toEqual
将对象的每个元素相互比较,所以在你的情况下
expectedAction.test === actualAction.test
两者都是'123'
但
也是如此expectedAction.value === actualAction.value
两者都是undefined
第二次测试失败,因为toBe
使用===
来比较导致失败的两个对象,因为它们不是同一个实例。对象通过toBe
的唯一方法是将自己用于比较:
expect(expectedAction).toBe(expectedAction)
答案 1 :(得分:1)
如果你真的需要它被认为是不同的,一个选择是使用Jest快照测试,如:
expect(expectedAction).toMatchSnapshot();
第一次,它将创建一个快照文件并将javascript对象打印到它,当你再次运行测试时,它会将它与快照进行比较。 大多数情况下,快照用于比较组件渲染树,但您可以将其用于任何javascript对象。