预期[]为[] Jasmine,如何检查空数组

Kai*_*las 23 javascript arrays unit-testing jasmine angular

尝试检查空数组时出错.我试过用:

情况1:通过初始化为数组

expect(fixture.componentInstance.dataSource).toBe([]);
Run Code Online (Sandbox Code Playgroud)

情况2:通过初始化为数组

let expectedAry = new Array;
expect(fixture.componentInstance.dataSource).toBe(expectedAry);
Run Code Online (Sandbox Code Playgroud)

两种情况都有相同的错误:

Expected [  ] to be [  ].
Run Code Online (Sandbox Code Playgroud)

阵列也可以通过它们的长度来检查,以下工作正常

expect(fixture.componentInstance.dataSource.length).toEqual(0); 
Run Code Online (Sandbox Code Playgroud)

0 length是一个选项,但不确定这是否是检查数组是否为空的正确方法.我们有更好的选择来检查数组是否为空?

Eva*_*oli 53

toBe 是一个明确的参考检查.

expect([1]).toBe([1]) 将失败,因为引用不同.

您应该使用toEqual,它有一些智能来检查数组内容而不是仅仅进行参考比较.


t_d*_*m93 13

使用toHaveSize匹配器:

expect(array).toHaveSize(0);
Run Code Online (Sandbox Code Playgroud)

强烈建议使用它,因为您使用它获得的错误消息要好得多(例如Error: Expected array to have size 0

附带Jasmine 3.6发布文档


小智 5

使用 .toHaveLength 检查对象是否具有 .length 属性并将其设置为某个数值。

这对于检查数组或字符串大小特别有用。

expect([1, 2, 3]).toHaveLength(3);
expect('abc').toHaveLength(3);
expect('').not.toHaveLength(5);
Run Code Online (Sandbox Code Playgroud)

来源https://jestjs.io/docs/expect#tohavelengthnumber