Sha256: 815b1cd50614f422822bd570c2f1804520b5bc21d7fa91df9661342c5cddf9b9

Contents?: true

Size: 1.65 KB

Versions: 1

Compression:

Stored size: 1.65 KB

Contents

var observer = require('booster/support/observer');

describe('observer', function() {
  var Subject = function() { };
  var Observer = function() { };

  _.extend(Subject.prototype, Backbone.Events);
  _.extend(Observer.prototype, observer.mixin(), { test: function() {} });

  beforeEach(function() {
    this.subjects = [new Subject(), new Subject()];
    this.observer = new Observer();
    spyOn(this.observer, 'test');
  });

  it('should allow unobserving a single subject and event', function() {
    var observer = this.observer;

    _.each(this.subjects, function(subject) {
      observer.observe(subject, 'change:one', observer.test);
      observer.observe(subject, 'change:two', observer.test);
      subject.trigger('change:one');
      subject.trigger('change:two');
    });

    expect(observer.test.callCount).toEqual(4);

    _.each(this.subjects, function(subject) {
      observer.unobserve(subject, 'change:one', observer.test);
      subject.trigger('change:one');
      subject.trigger('change:two');
    });

    expect(observer.test.callCount).toEqual(6);
  });

  it('should allow unobserving all subjects', function() {
    var subjects = [new Subject(), new Subject()];
    var observer = new Observer();
    spyOn(observer, 'test');

    _.each(subjects, function(subject, index) {
      observer.observe(subject, 'change', observer.test);
      subject.trigger('change');
      expect(observer.test.callCount).toEqual(index + 1);
    });

    observer.unobserve();
    expect(observer._subjects).toEqual(undefined);

    _.each(subjects, function(subject) {
      subject.trigger('change');
      expect(observer.test.callCount).toEqual(2);
    });
  });
})

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
booster-0.0.1 test/dummy/app/assets/javascripts/booster/support/observer_spec.js.boost