Пример #1
0
 it('should resolve the Promise **after** `prepare` method is executed', function (done) {
     var model = new Model();
     spyOn(model, 'prepare');
     var promise = model.load();
     promise.done(function () {
         expect(model.prepare).toHaveBeenCalled();
         done();
     });
 });
Пример #2
0
 it('should abort a abortable Promise if model is disposed before it resolves', function () {
     var model = new Model();
     var spy = jasmine.createSpy('abort');
     model.datasource = function () {
         var promise = delayed(1, 1)();
         promise.abort = spy;
         return promise;
     };
     model.load();
     model.dispose();
     expect(spy).toHaveBeenCalled();
 });
Пример #3
0
 it('should not call `abort` after it resolves', function (done) {
     var model = new Model();
     var spy = jasmine.createSpy('abort');
     model.datasource = function () {
         var promise = delayed(1, 1)();
         promise.abort = spy;
         return promise;
     };
     model.load().done(function () {
         expect(spy).not.toHaveBeenCalled();
         done();
     });
 });
Пример #4
0
 it('should load data in parallel if `datasource` is given as an array', function (done) {
     var model = new Model();
     var queue = [];
     model.datasource = [
         { x: delayed(20, 'a', queue) },
         { y: delayed(10, 'b', queue) }
     ];
     var promise = model.load();
     promise.done(function () {
         expect(queue.join('')).toBe('ab');
         done();
     });
 });
Пример #5
0
 it('should add a property if `datasource` is given as an object', function (done) {
     var model = new Model();
     model.datasource = {
         x: function() {
             return 1;
         }
     };
     var promise = model.load();
     promise.done(function () {
         expect(model.get('x')).toBe(1);
         done();
     });
 });
Пример #6
0
 it('should cancel a cancellable Promise in parallel config if model is disposed before it resolves', function () {
     var model = new Model();
     var spy = jasmine.createSpy('cancel');
     model.datasource = {
         a: function () {
             var promise = delayed(1, 1)();
             promise.cancel = spy;
             return promise;
         }
     };
     model.load();
     model.dispose();
     expect(spy).toHaveBeenCalled();
 });
Пример #7
0
 it('should dump the return value if `datasource` is given as a function', function (done) {
     var model = new Model();
     model.datasource = function () {
         return {
             x: 1,
             y: 2
         };
     }
     var promise = model.load();
     promise.done(function () {
         expect(model.get('x')).toBe(1);
         expect(model.get('y')).toBe(2);
         done();
     });
 });
Пример #8
0
 it('should abort a abortable Promise in sequence config if model is disposed before it resolves', function (done) {
     var model = new Model();
     var spy = jasmine.createSpy('abort');
     model.datasource = [
         function () {
             var promise = delayed(1, 10)();
             promise.abort = spy;
             return promise;
         }
     ];
     model.load();
     setTimeout(function () {
         model.dispose();
         expect(spy).toHaveBeenCalled();
         done();
     }, 1);
 });
Пример #9
0
 it('should accept data load descriptor as `datasource` item', function (done) {
     var model = new Model();
     var queue = [];
     model.datasource = {
         x: { name: 'a', retrieve: delayed(20, 'a', queue) },
         y: { name: 'b', retrieve: delayed(10, 'b', queue) }
     };
     var promise = model.load();
     promise.done(function () {
         expect(queue.join('')).toBe('ba');
         expect(model.get('x')).toBeUndefined();
         expect(model.get('y')).toBeUndefined();
         expect(model.get('a')).toBe('a');
         expect(model.get('b')).toBe('b');
         done();
     });
 });
Пример #10
0
 it('should give the correct load sequence when `datasource` is given as a mixed config', function (done) {
     var model = new Model();
     var queue = [];
     model.datasource = [
         { x: delayed(20, 'a', queue) },
         { y: delayed(10, 'b', queue) },
         {
             a: delayed(20, 'c', queue),
             b: delayed(10, 'd', queue)
         }
     ];
     var promise = model.load();
     promise.done(function () {
         expect(queue.join('')).toBe('abdc');
         done();
     });
 });
Пример #11
0
 it('should wait for datasource loaded if data factory returns a Promise', function (done) {
     var model = new Model();
     var deferred = new Deferred();
     model.datasource = {
         x: function () {
             setTimeout(function () {
                 deferred.resolve(1);
             }, 0);
             return deferred.promise;
         }
     };
     var promise = model.load();
     promise.done(function () {
         expect(deferred.state).toBe('resolved');
         expect(model.get('x')).toBe(1);
         done();
     });
 });
Пример #12
0
 it('should ignore `name` descriptor property if `dump` is set to true', function (done) {
     var model = new Model();
     model.datasource = [
         {
             name: 'x',
             retrieve: function() {
                 return {
                     x: 1,
                     y: 2
                 }
             },
             dump: true
         }
     ];
     var promise = model.load();
     promise.done(function () {
         expect(model.get('x')).toBe(1);
         expect(model.get('y')).toBe(2);
         done();
     });
 })
Пример #13
0
 it('should return a Promise when calling `load` method', function () {
     var model = new Model();
     var value = model.load();
     expect(Deferred.isPromise(value)).toBe(true);
 });