【问题标题】:AngularJS: inject causing error in testsAngularJS:注入导致测试错误
【发布时间】:2015-03-02 04:41:47
【问题描述】:

我无法在测试中使用inject

angularangular-mocks 都是 version 1.3.14

我在这里完全迷失了。任何想法将不胜感激!

这会导致错误:

describe("factory: Account", function () {

    var $httpBackend;
    var $rootScope;
    var Account;

    beforeEach(module('app'));

    beforeEach(inject(function() {
        // $httpBackend = _$httpBackend_;
    }));


    it("Should fetch account", function() {
    });
});

但如果我删除注入它会通过:

describe("factory: Account", function () {

    var $httpBackend;
    var $rootScope;
    var Account;

    beforeEach(module('app'));

    beforeEach(function() {
        // $httpBackend = _$httpBackend_;
    });


    it("Should fetch account", function() {
    });
});

在 Gruntfile.js 中:

    karma: {
        unit: {
            options: {
                frameworks: ['jasmine'],
                singleRun: true,
                browsers: ['Safari'],
                files: [
                    'bower_components/angular/angular.js',
                    'bower_components/angular-mocks/angular-mocks.js',
                    'bower_components/moment/moment.js',
                    'bower_components/ckeditor/ckeditor.js',
                    'bower_components/ng-ckeditor/ng-ckeditor.min.js',
                    'app/app.js',
                    'app/**/*.js',
                ]
            }
        }
    }

这是测试的输出:

Safari 8.0.5 (Mac OS X 10.10.3) factory: Account Should fetch account FAILED
    /.../bower_components/angular/angular.js:63:32
    /.../bower_components/angular/angular.js:4120:30
    forEach@/.../bower_components/angular/angular.js:323:24
    loadModules@/.../bower_components/angular/angular.js:4081:12
    createInjector@/.../bower_components/angular/angular.js:4007:22
    workFn@/.../bower_components/angular-mocks/angular-mocks.js:2353:60

【问题讨论】:

    标签: angularjs karma-jasmine


    【解决方案1】:

    我遇到了同样的问题。这也是一个依赖问题,比如@user2755599,这篇帖子https://stackoverflow.com/a/37946833/2908670帮助了我。

    基本上,错误消息可能会被 PhantomJS 隐藏。切换到 Chrome 等浏览器来运行测试以获取更多信息。

    【讨论】:

      【解决方案2】:

      我认为你应该这样写:

      describe("factory: Account", function () {
          var $httpBackend;
          var $rootScope;
          var Account;
      
          beforeEach(module('app'));
      
          beforeEach(function(_$httpBackend_) {
               $httpBackend = _$httpBackend_;
          });
      
          it("Should fetch account", function() {
          });
      });
      

      使用前需要声明$httpBackend

      【讨论】:

        【解决方案3】:

        如果你移除了注入,它会起作用,因为基本上它不会做任何事情。

        你需要注入,$httpBackend 应该作为一个下划线包裹的参数传递:

        describe("factory: Account", function () {
        
            var $httpBackend;
            var $rootScope;
            var Account;
        
            beforeEach(module('app'));
        
            beforeEach(inject(function(_$httpBackend_) {
                $httpBackend = _$httpBackend_;
            }));
        
        
            it("Should fetch account", function() {
            });
        });
        

        【讨论】:

        • 这不是强制性的,只是为了方便你想再次使用同名的变量,就像你的例子一样
        【解决方案4】:

        对我来说,问题仅仅是因为加载了 angular-mocks 两次。

        该项目是使用 Browserify 编写的,最初的开发人员在 vendor.js 包中包含模拟,并通过其配置将其加载到 Karma 中。一旦我从包中删除了模拟,只让 Karma 加载它,我就可以走了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-20
          • 1970-01-01
          • 1970-01-01
          • 2017-02-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多