This question already has answers here:
Jasmine.js comparing arrays

(4个答案)


5年前关闭。




我正在用JavaScript创建一个基本的Tenpin保龄球计分程序。为此,到目前为止,我已经创建了不同的Frame和Game功能。我创建了一个用于测试我的游戏功能的框架双。我遇到的测试是这样的:
it('can take a frame as a parameter', function(){
frame.frameOne.and.callFake(function(){
[5, 5, 'spare'];
});
expect(game.frame1(frame)).toBe([5, 5, 'spare']);
});`

它正在测试的游戏逻辑是:
Game.prototype.frame1 = function (frame) {
frame.frameOne;
return [5, 5, 'spare'];
};

现在,我很确定代码可能是错误的,因为我是Javascript / Jasmine的新手,并且通常还是进行编码,但是令我感到困惑的是,当我运行测试时,我从Jasmine得到了这个错误:

预期[5,5,'备用']为[5,5,'备用']

现在对我来说,这是一场比赛,不是失败吗?我将数组交换为true,然后通过该值,所以为什么数组显然是相同的匹配,但是 Jasmine 说它们不是并且失败了?

想法?!?

最佳答案

toBe基本上是严格的比较操作===。在您的情况下,即使两个数组看起来相同,但它们也不相等,因为它们是两个不同的对象。 javascript中的非原始类型(对象,函数,数组等)仅在指向同一对象时才相等。

您应该使用toEqual代替,它通过比较属性及其值来检查对象的相等性:

expect(game.frame1(frame)).toEqual([5, 5, 'spare']);

关于javascript - Jasmine 测试失败...为什么? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29727196/

10-10 14:18
查看更多