AngularJS 1.2.2中$ http和$ httpBackend的惯用组成

马克·西曼(Mark Seemann)

我有一个AngularJS / Jasmine单元测试,可以与AngularJS 1.0.7正常工作,但在Angular 1.2.2中不起作用:

servicesSpec.js

describe('services', function() {
    beforeEach(module('workPadApp'));

    describe('taskGateway', function() {
        var sut;
        beforeEach(inject(function(taskGateway) {
            sut = taskGateway;
        }));

        describe('saving a task', function() {
            it('GETs correctly', inject(function($httpBackend) {
                $httpBackend.expectGET('/').respond({ foo : 'bar' });
                sut.createTask({ taskRef : 'baz' });
                $httpBackend.flush();
            }))
        })
    })
})

app.js

var workPadApp = angular.module('workPadApp', ['workPadApp.services']);

services.js

angular.module('workPadApp.services', []).

  factory('taskGateway', function($http, $q) {
    return {
      createTask : function(task) {
        $http.get('/')
          .success(function(response) {
            console.log('success');
          })
          .error(function(response) {
            console.log('error');
          });
      }
    }
  });

预期结果

当我使用AngularJS 1.0.7与Karma一起运行时,一切都很好:

日志:“成功”

Chrome 33.0.1750(Windows 7):执行1之1成功(0.179秒/0.03秒)

实际结果

但是,当我用AngularJS 1.2.2运行它时,得到以下输出:

Chrome 33.0.1750(Windows 7)服务taskGateway保存任务正确获取失败

   Error: No pending request to flush !

       at Error (native)
       at Function.$httpBackend.flush (c:/Users/Mark/Documents/Grean/HHM/Src/HHMFrontend/test/lib/angular/angular-mocks.js:1195:34)
       at null.<anonymous> (c:/Users/Mark/Documents/Grean/HHM/Src/HHMFrontend/test/unit/servicesSpec.js:91:18)
       at Object.invoke (c:/Users/Mark/Documents/Grean/HHM/Src/HHMFrontend/app/lib/angular.js:3641:28)
       at workFn (c:/Users/Mark/Documents/Grean/HHM/Src/HHMFrontend/test/lib/angular/angular-mocks.js:1778:20)
   Error: Declaration Location
       at window.jasmine.window.inject.angular.mock.inject (c:/Users/Mark/Documents/Grean/HHM/Src/HHMFrontend/test/lib/angular/angular-mocks.js:1764:25)
       at null.<anonymous> (c:/Users/Mark/Documents/Grean/HHM/Src/HHMFrontend/test/unit/servicesSpec.js:72:26)
       at null.<anonymous> (c:/Users/Mark/Documents/Grean/HHM/Src/HHMFrontend/test/unit/servicesSpec.js:62:3)
       at null.<anonymous> (c:/Users/Mark/Documents/Grean/HHM/Src/HHMFrontend/test/unit/servicesSpec.js:8:2)

Chrome 33.0.1750(Windows 7):执行1之1(1失败)(0.349秒/ 0.133秒)

我看了$ httpBackend文档,那里的示例使用了一种更加势在必行的使用$injector服务的设置样式

这让我感到惊讶,因为在1.0.7版中使用的声明式样式更加简洁。这真的是前进的唯一正确方法,还是我错过了一些东西?

尼科斯·巴克萨瓦尼斯(Nikos Baxevanis)

由于它原来的相关angular-*模块必须是相同的版本

在这个例子中,angular.js并且angular-mocks.js必须是同一版本,1.2.2。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章