茉莉花测试失败......为什么?

时间:2015-04-19 07:45:32

标签: javascript jasmine

我正在用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说它们不是并且失败了?

想法?!?

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

因为在您的代码中有两个不同的数组,两者都有相同的值。

在java脚本中比较对象(如数组)正在进行参考比较。您有两个不同的数组实例,而不是两个对同一数组的引用。

此链接可能有助于解释:Object Equality in JavaScript