Sasha
Sasha

Reputation: 6466

Karma/Jasmine spec -- Expected { } to equal { }

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

Answers (1)

SomeKittens
SomeKittens

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

Related Questions