Jest expect()。toEqual()不会抛出错误

时间:2017-05-04 18:20:17

标签: unit-testing reactjs jestjs

如果我使用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);
});

它再次没有说“比较值没有视觉差异”。

行为是否正确?如何修改我的测试用例以使其无法正确失败。

2 个答案:

答案 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对象。