2015-03-02 29 views
3

我無法在測試中使用injectAngularJS:在測試中注入造成錯誤

兩個angularangular-mocksversion 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 
    [email protected]/.../bower_components/angular/angular.js:323:24 
    [email protected]/.../bower_components/angular/angular.js:4081:12 
    [email protected]/.../bower_components/angular/angular.js:4007:22 
    [email protected]/.../bower_components/angular-mocks/angular-mocks.js:2353:60 

回答

1

我覺得你應該這樣寫:

describe("factory: Account", function() { 
    var $httpBackend; 
    var $rootScope; 
    var Account; 

    beforeEach(module('app')); 

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

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

你需要使用它之前宣佈$httpBackend

0

它的工作,如果你刪除注射,因爲基本上它不會做任何事情。

您所需要的注射和$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() { 
    }); 
}); 
+0

這不是強制性的,只是爲了方便,如果你想再次使用具有相同名稱的變量,如你的例子 – Michiel 2017-02-10 10:57:27

0

對我來說,問題只是由於加載角嘲笑的兩倍。

該項目是使用Browserify編寫的,原始開發人員在vendor.js包中包含mocks,並通過它的配置將其加載到Karma。一旦我從捆綁中刪除嘲笑,只讓Karma加載它,我很高興去。

2

我遇到了同樣的問題。這也是一個依賴性問題,像@ user2755599,這個職位https://stackoverflow.com/a/37946833/2908670幫了我。

基本上,PhantomJS可能會隱藏錯誤消息。切換到Chrome等瀏覽器以運行測試以獲取更多信息。