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

Posted

技术标签:

【中文标题】预期 [ ] 为 [ ] Jasmine,如何检查空数组【英文标题】:Expected [ ] to be [ ] Jasmine, how to check empty array 【发布时间】:2018-03-14 14:09:34 【问题描述】:

尝试检查空数组时出错。我尝试使用:

案例1:通过初始化为数组

expect(fixture.componentInstance.dataSource).toBe([]);

案例2:通过初始化为数组

let expectedAry = new Array;
expect(fixture.componentInstance.dataSource).toBe(expectedAry);

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

Expected [  ] to be [  ].

数组也可以通过长度来检查,下面的工作正常

expect(fixture.componentInstance.dataSource.length).toEqual(0); 

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

【问题讨论】:

使用toEqual 期望。 【参考方案1】:

toBe 不检查数组的内容,它只检查引用是否相同。

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

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

【讨论】:

【参考方案2】:

使用toHaveSize匹配器:

expect(array).toHaveSize(0);

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

伴随Jasmine 3.6:release docs

【讨论】:

【参考方案3】:

你可以这样尝试-

expect(component.XYZ.length).toEqual(0);

【讨论】:

请仔细看,不一样的:) 我说的是component.XYZ.length toEqual 0。 好的,知道了。我删除了我的评论。我仍然认为你应该在你的回答中解释它与公认的不同之处以及为什么你认为这是一个更好的解决方案。谢谢。 :)

以上是关于预期 [ ] 为 [ ] Jasmine,如何检查空数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 Angular 的 spyOn 的情况下检查服务中的方法是不是在 Jasmine 单元测试中被调用?

使用节点检查器调试 karma-jasmine 测试

如何使用jasmine-marbles测试rxjs管道中的timeout()

使用Jasmine检查函数中的内部变量

javascript 检查取消订阅成功Karma,Jasmine

如何使用 Jasmine 为以下 javascript 函数编写单元测试用例