我正在用JavaScript创建一个基本的保龄球得分程序。要做到这一点,我到目前为止已经创建了不同的功能框架和游戏。我已经创建了一个用于测试我的游戏功能的双帧。我遇到问题的测试是:
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然后传递,那么为什么Arrays显然是相同的匹配但是Jasmine说它们不是并且失败了?
想法?!?
答案 0 :(得分:3)
toBe
基本上是严格的比较操作===
。在你的情况下,即使两个数组看起来相同,它们也不相等,因为它们是两个不同的对象。 javascript(对象,函数,数组等)中的非基本类型只有在指向同一个对象时才相等。
您应该使用toEqual
代替通过比较属性及其值来检查对象的相等性:
expect(game.frame1(frame)).toEqual([5, 5, 'spare']);
答案 1 :(得分:0)
因为在您的代码中有两个不同的数组,两者都有相同的值。
在java脚本中比较对象(如数组)正在进行参考比较。您有两个不同的数组实例,而不是两个对同一数组的引用。
此链接可能有助于解释:Object Equality in JavaScript