2017-02-01 27 views
0

このエラーを解決する方法を教えてください。テストを書くことはできません。JasmineとWebpackでAngularjsのユニットテスト、エラーUnknown provider

import Rx from 'rxjs/Rx' 
var TheMiddleModule = angular.module('TheMiddleModule', []) 
TheMiddleModule.factory('TheMiddleOp', function ($http){ 
    var api = 'someUrl' 
    var TheMiddleOp = {} 

    TheMiddleOp.getSsoidFromService =() => { 
    return Rx.Observable.fromPromise(
     $http({ 
      method: 'GET', 
      url: api 
     }) 
    ) 
    } 

    return TheMiddleOp 
}) 

これは私のテストのWebPACK構成です: これは私がテストしたいAngularjs工場(service.es6)である

var JasmineWebpackPlugin = require('jasmine-webpack-plugin'); 
module.exports = { 
    entry: ['./app/scripts/test/service.js'], 
    plugins: [new JasmineWebpackPlugin()], 
    output: { 
     path: __dirname, 
     filename: 'test.js' 
    }, 
    module: { 
     loaders: [ 
     { 
      test: /\.es6$/, 
      exclude: /(node_modules|bower_components)/, 
      loader: 'babel?presets[]=es2015!eslint-loader' 
     }, 
     { 
      test: /\.js$/, 
      exclude: /(node_modules|bower_components)/, 
      loader: 'babel?presets[]=es2015!eslint-loader' 
     } 
    ] 
    } 
} 
}; 

、これが私のJSテストファイルです:

import 'angular'; 
import 'angular-mocks'; 
import '../services/service.es6'; 

var service; 

describe('service test', function() { 
    var $httpBackend, $httpProvider; 
    var module = angular.mock.module(); 
    var url = 'someUrl'; 

    beforeEach(function() { 

     module('TheMiddleModule'); 

     inject(function (_$httpBackend_, _TheMiddleOp_) { 
      $httpBackend = _$httpBackend_; 
      service = _TheMiddleOp_; 

      $httpBackend.when('POST', url) 
      .respond(200, {'sso-id':'test'}); 
     }); 
    }); 

    it('$httpBackend should be defined', function(){ 
     expect($httpBackend).toBeDefined(); 
    }); 

    it('TheMiddleOp should be defined', function(){ 
     expect(service).toBeDefined(); 
    }); 

    it('should call the ssoid service', function(){ 
     var getFromService = service.getSsoidFromService() 
     getFromService.subscribe(
      (response) => {}, 
      (e) => {}, 
      () => { 
       $httpBackend.expectGET(url); 
       $httpBackend.flush(); 
      } 
     ) 
    }); 

    afterEach(function() { 
     $httpBackend.verifyNoOutstandingExpectation(); 
     $httpBackend.verifyNoOutstandingRequest(); 
    }); 
}); 

ジャスミンが私に与えるエラーは:

Error: [$injector:unpr] Unknown provider: TheMiddleOpProvider <- TheMiddleOp 

私は、行をコメントする場合:

service = _TheMiddleOp_; 

$ httpBackendテストが正常に渡し、それは当然のことながら、他の人が失敗しました。 私はまた、エクスポートを行わずに、デフォルトのエクスポートとして、さらに多くの組み合わせでモジュールを使用して、service.es6をインポートしようとしました。 私に与えることができる助けを前もってありがとう。

答えて

0

モジュールが定義されていないようです。ファクトリはそのモジュールに登録されているためです。したがって、エラーはモジュール定義にあります。

var module = angular.mock.module(); 

は、なぜこれが必要とされている:私は推測している場合

は三つ間違っているがあるかもしれませんか?それぞれの前にangular.mock.moduleを書くのはどうですか?

angular.mock.module('TheMiddleModule'); 

その他のオプションは、工場と変数の選択です。それを次のように書き直す提案:

angular.module('TheMiddleModule', []) 
    .factory('TheMiddleOp', function ($http){ 
    var api = 'someUrl'; 

    return { 
    getSsoidFromService =() => { 
     return Rx.Observable.fromPromise(
      $http({ 
      method: 'GET', 
      url: api 
     }); 
    ) 
    }; 
    }); 

最後に、あなたのウェブパック設定が間違っています。しかし、あなたがシングルランではないようにあなたのテストをデバッグすることができます。

最後のコメントです。ユニットテスト自体は何もテストしていません。あなたのテストの角度模擬が働いているので、$ httpBackendがあるなら、チェックを外しますか?

+0

ありがとうございました! これを解決するには、私は: (1)が次のように書いています:angular.mock.module( 'TheMiddleModule');提案されているように (2)は、 (3)が$ httpBackendテストを削除したので、工場を書き換えました。 その後、expect(サービス).toBeDefined();テストに合格しました。そして今、私は最終的に実際のテストを書くことができます。 おかげで再び! – user1308170

+0

私が助けてくれることを嬉しく思います –

関連する問題