我正在运行一个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并没有将这两个空对象视为等价物。知道为什么吗?我有点难过。
答案 0 :(得分:3)
Post.cached
是Cache
的一个实例,而您的{}
只是一个无聊的“{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