This question already has answers here:
Jasmine.js comparing arrays
(4个答案)
5年前关闭。
我正在用JavaScript创建一个基本的Tenpin保龄球计分程序。为此,到目前为止,我已经创建了不同的Frame和Game功能。我创建了一个用于测试我的游戏功能的框架双。我遇到的测试是这样的:
它正在测试的游戏逻辑是:
现在,我很确定代码可能是错误的,因为我是Javascript / Jasmine的新手,并且通常还是进行编码,但是令我感到困惑的是,当我运行测试时,我从Jasmine得到了这个错误:
预期[5,5,'备用']为[5,5,'备用']
现在对我来说,这是一场比赛,不是失败吗?我将数组交换为true,然后通过该值,所以为什么数组显然是相同的匹配,但是 Jasmine 说它们不是并且失败了?
想法?!?
(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/