Reputation: 6466
I'm running a Karma spec to test the functionality of an Angular BaseClass for my models that is outlined in an Egghead.io tutorial.
The behavior seems to be working, but I'm running into a weird error:
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 (it's hard to search, given the characters -- suggests that toEqual
should be able to recognize the two objects' equivalence -- so I'm a little stumped.
Here's the spec code (coffeescript) :
describe 'BCCache', ->
it "adds a cache to the model", ->
expect(Post.cached).toEqual({})
And here's what it's testing:
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
The spec is basically asserting that the cached
method (currently) returns a new empty object, which the cache.coffee
file seems to successfully do. But somehow, Karma doesn't see the two empty objects as equivalent. Any idea why? I'm a little stumped.
Upvotes: 2
Views: 14787
Reputation: 39532
Post.cached
is an instance of Cache
, while your {}
is just a boring ol' Object
. Jasmine considers having a different constructor a valid reason to fail a toEquals
comparison.
If you want to check equality as above, you can do something like:
var mockCache = new Cache();
expect(Post.cached).toEqual(mockCache);
Alternatively, you could just check if it's an empty object:
expect(Object.keys(Post.cached).length).toBe(0);
Thanks to Jeff Storey for the link to the code: https://github.com/pivotal/jasmine/blob/master/src/core/matchers/matchersUtil.js#L143
Upvotes: 4