2016-09-13 7 views
0
私は自分のアプリケーションでは、角度翻訳使用しています

とユニットテストを書くとき、彼らはエラーで失敗していると/src/app/modules/login/resources/en.json GETエラー:予期しない要求:カルマ

Error: Unexpected request: GET /src/app/modules/login/resources/en.json 
     No more request expected 
私はすでに新しい.jsファイルにアンギュラ翻訳を追加するようないくつかの解決策ではなくapp.jsファイルのファイル、その後karma.configでそのファイルを除外しようとした

'use strict'; 

var baseDir = 'client'; 

module.exports = { 

    //This is the list of file patterns to load into the browser during testing. 
    files: [ 
    baseDir + '/src/vendor/angular/angular.js', 
    baseDir + '/src/vendor/angular-mocks/angular-mocks.js', 
    baseDir + '/src/vendor/angular-ui-router/release/angular-ui-router.js', 
    baseDir + '/src/vendor/angular-bootstrap/ui-bootstrap.min.js', 
    baseDir + '/src/vendor/angular-bootstrap/ui-bootstrap-tpls.min.js', 
    baseDir + '/src/vendor/angular-translate/angular-translate.js', 
    baseDir + '/src/vendor/angular-translate-loader-partial/angular-translate-loader-partial.js', 
    baseDir + '/src/app/modules/home/home.module.js', 
    baseDir + '/src/app/modules/login/login.module.js', 
    baseDir + '/src/app/app.js', 
    baseDir + '/src/app/**/*.js', 
    baseDir + '/src/app/modules/**/*.html', 
    baseDir + '/test/unit/**/*.spec.js' 
    ], 

    //used framework 
    frameworks: ['jasmine'], 

    plugins: [ 
    'karma-chrome-launcher', 
    'karma-phantomjs-launcher', 
    'karma-jasmine', 
    'karma-coverage', 
    'karma-html-reporter', 
    'karma-mocha-reporter', 
    'karma-ng-html2js-preprocessor' 
    ], 

    preprocessors: { 
    '**/client/src/**/*.js': 'coverage', 
    '**/client/src/**/*.html': ['ng-html2js'] 
    }, 

    reporters: ['mocha', 'html', 'coverage'], 

    coverageReporter: { 
    type: 'html', 
    dir: baseDir + '/test/unit-results/coverage', 
    file: 'coverage.html' 
    }, 

    htmlReporter: { 
    outputDir: baseDir + '//test/unit-results/html' 
    }, 

    ngHtml2JsPreprocessor: { 
    moduleName: 'templates', 
    cacheIdFromPath : function(filepath) { 
     return filepath.substr(filepath.indexOf("appname")+8); 
    } 
    }, 

    logLevel: 'info', 

    urlRoot: '/__test/', 

    //used browsers (overriding in some gulp task) 
    browsers: ['PhantomJS'] 
}; 

これは私のkarma.configがどのように見えるかです。 js。ここに私のテストの短いコードもあります。たぶん私はこのen.jsonファイルをどうにかして無視できますか?

/* jshint undef:false*/ 
(function() { 
    'use strict'; 

    describe('LoginCtrl', function() { 
    var loginController, rootScope, q, state, mockLoginService, mockSessionService, scope; 
    var mockupUser = {username: 'Test', password: 'Test1'}; 
    var mockupBadUser = {username: 'Test', password: 'Test123'}; 

    beforeEach(module('app')); 
    beforeEach(module('login')); 
    beforeEach(inject(function($rootScope, $controller, $q, $state, _LoginService_, _SessionService_) { 
     rootScope = $rootScope; 
     scope = rootScope.$new(); 
     q = $q; 
     state = $state; 
     mockLoginService = _LoginService_; 
     mockSessionService = _SessionService_; 
     //spyOn(mockLoginService , 'userLogin').and.returnValue(q.when({})); 
     loginController = $controller('LoginCtrl as loginvm', { 
     $scope : scope, 
     mockLoginService : _LoginService_, 
     mockSessionService : _SessionService_ 
     }); 
    })); 
    describe('loginUser with good credentials',function(){ 
     beforeEach(function(){ 
     spyOn(mockLoginService , 'userLogin').and.callFake(function(mockupUser) { 
      var deferred = q.defer(); 
      if (mockupUser.username === "Test" && mockupUser.password === "Test1") { 
      deferred.resolve(mockupUser); 
      } 
      else { 
      deferred.reject(); 
      } 
      return deferred.promise; 
     }); 
     spyOn(state, 'go'); 
     spyOn(mockSessionService, 'setUser'); 
     }); 
     it("should call loginUser from LoginService with good credentials", function() { 
     var expectedState = 'root.home'; 
     loginController.loginUser(mockupUser); 

     rootScope.$digest(); 

     expect(mockLoginService.userLogin).toHaveBeenCalledWith(mockupUser); 
     expect(mockSessionService.setUser).toHaveBeenCalled(); 
     expect(state.go).toHaveBeenCalledWith(expectedState); 
     }); 
    }); 
    describe('loginUser with bad credentials',function(){ 
     beforeEach(function(){ 
     spyOn(mockLoginService , 'userLogin').and.callFake(function(mockupBadUser) { 
      var deferred = q.defer(); 
      deferred.reject(); 

      return deferred.promise; 
     }); 
     }); 
     it("should call loginUser from LoginService with bad credentials", function() { 
     loginController.loginUser(); 

     rootScope.$digest(); 

     expect(mockLoginService.userLogin).toHaveBeenCalled(); 
     }); 
    }); 
    }); 
})(); 

ザカリアは

beforeEach(function(){ 
    var $injector, $httpBackend; 
    $injector = angular.injector (['ngMock']); 
    $httpBackend = $injector.get ('$httpBackend'); 
    $httpBackend.whenGET("/src/app/modules/home/resources/en.json").respond({ title: 'Title' }); 
    $httpBackend.whenGET("/src/app/modules/login/resources/en.json").respond({ title: 'Title' }); 
    }); 

    describe('HomeCtrl', function() { 
    var homeController, rootScope, q, state, mockDataService, mockSessionService, scope, modal; 
    var mockupUsers = [.... 

に答えるための更新、私はこれらの2を追加するために、以前言ったように働いている唯一のソリューションです...私はテストの1を追加しようとしましたし、彼らはまだ失敗していますライン:すべてのユニットテストで

$httpBackend.whenGET("/src/app/modules/home/resources/en.json").respond({ title: 'Title' }); 
    $httpBackend.whenGET("/src/app/modules/login/resources/en.json").respond({ title: 'Title' }); 

....私もちょうどkarma.configでこのリンスを追加しようとしました:

あなたのよう(あなた beforeEach ESを繰り返さないようにするに

$httpBackend.whenGET("/src/app/modules/login/resources/en.json").respond({ title: 'Title' }); 

編集 :あなたは、ファイルを変換嘲笑を提供するために$httpBackendサービスを使用することができます10

baseDir + '/test/unit/**/*.spec.js', 
    { 
    pattern: baseDir + '/src/app/modules/**/*.json', 
    included: false, 
    served: true 
], 

しかし、誰成功のいずれか...

+0

てみましたカルマの設定ファイル(ファイルパターン領域内)にありますか? – Zakaria

+0

私はこの行をファイルに追加しようとしました:karma.configの[]では成功しませんでした...同じエラー.. { pattern:baseDir + '/src/app/modules/login/resources/en.json' が見:BASEDIR + '/src/app/modules/home/resources/en.json' が見: {パターン、偽 を}:真、 が含まれる:真、 が配信真、 が配信:真、 含まれています:false } – Bukic

答えて

0

...モジュールを登録するときだけでユニットテストでこのコードを追加:あなたはあなたの「.json」を追加

beforeEach(module('myApp', function ($provide, $translateProvider) { 

    $provide.factory('customLoader', function ($q) { 
    return function() { 
     var deferred = $q.defer(); 
     deferred.resolve({}); 
     return deferred.promise; 
    }; 
    }); 

    $translateProvider.useLoader('customLoader'); 

})); 

https://angular-translate.github.io/docs/#/guide/22_unit-testing-with-angular-translate

1

$httpBackend.whenGETが表示されます)、テストの重複の問題を解決するthis postを参照することができます。検索し、私は1つを発見し解決するために費やさいくつかの時間後

+0

これは動作しています。しかし、これの1つの問題は、私が将来作成し、そのファイルの単体テストで翻訳を使用しているすべての.jsファイルのためです。私はbeforeEach(inject(...))ですべてを送信するような行を追加する必要がありますen.jsonファイル... – Bukic

+0

たとえば、別のホームコントローラユニットテスト用$ httpBackend.whenGET( "/ src/app/modules/home/resources/en.jso n")という2行を追加する必要がありました。 {タイトル: 'タイトル'}); $ httpBackend.whenGET( "/ src/app/modules/login/resources/en.js on")。respond({title: 'Title'}); – Bukic

関連する問題