业力/茉莉花规格 - 期望{}等于{}

时间:2014-10-13 22:52:41

标签: javascript angularjs phantomjs karma-runner karma-jasmine

我正在运行一个Karma规范来测试我的模型的Angular BaseClass的功能,这在Egghead.io教程中有所概述。

这种行为似乎有效,但我遇到了一个奇怪的错误:

PhantomJS 1.9.7 (Mac OS X) BCCache adds a cache to the model FAILED
  Expected {  } to equal {  }.
  Error: Expected {  } to equal {  }.

What I could find of this error(考虑到角色,搜索很难 - 表明toEqual应该能够识别这两个对象'等等 - 所以我可以很难过。

这是规范代码(coffeescript):

describe 'BCCache', ->
  it "adds a cache to the model", ->
    expect(Post.cached).toEqual({})

以下是它的测试内容:

base.coffee

angular.module("BaseClass")
  .factory "BCBase", ['BCCache', (Cache) ->
    Base = (attributes) ->
      _constructor = this
      _prototype = _constructor.prototype

      _constructor.cached = new Cache()

    return Base
  ]

cache.coffee

angular.module('BaseClass')
  .factory 'BCCache', -> 
    Cache = ->    
    return Cache

规范基本上断言cached方法(当前)返回一个新的空对象,cache.coffee文件似乎成功。但不知何故,Karma并没有将这两个空对象视为等价物。知道为什么吗?我有点难过。

1 个答案:

答案 0 :(得分:3)

Post.cachedCache的一个实例,而您的{}只是一个无聊的“{1}}。 Object。 Jasmine认为有一个不同的构造函数是toEquals比较失败的正当理由。

如果您想检查上述等式,可以执行以下操作:

var mockCache = new Cache();
expect(Post.cached).toEqual(mockCache);

或者,您可以检查它是否为空对象:

expect(Object.keys(Post.cached).length).toBe(0);

感谢Jeff Storey提供代码链接:https://github.com/pivotal/jasmine/blob/master/src/core/matchers/matchersUtil.js#L143