2016-11-12 7 views
0

У меня такая же проблема с проведением теста в моем приложении. Я начал использовать TypeScript, и я все еще учился.Inject Service in Karma with Typcript test

Я столкнулся эту ошибку:

Error: [$injector:unpr] Unknown provider: movieProvider <- movie 

movie.spec.ts

import { MovieService } from './movie'; 

describe('service MovieService',() => { 
    let movieService: MovieService; 

    beforeEach(angular.mock.module('movieSearch')); 

    it('should be registered', inject((movie : MovieService) => { 
    expect(movie).not.toBeNull(); 
    })); 
}); 

movie.ts

/** @ngInject */ 
export class MovieService { 
    static $inject = ['$log', '$http', 'LoaderManager']; 
    public apiMovieDetail: string = 'http://www.omdbapi.com/'; 

    /** @ngInject */ 
    constructor(private $log: angular.ILogService, private $http: angular.IHttpService, private loader: LoaderManager) { 
    } 

    public getMovie(id: string): angular.IPromise<IMovie> { 
    this.loader.add(); 
    return this.$http.get(this.apiMovieDetail + '?plot=short&r=json&i=' + id).then((response: any): any => { 
     this.loader.remove(); 
     return response.data; 
     }) 
     .catch((error: any): any => { 
     this.loader.remove(); 
     this.$log.error('XHR Failed for getMovie.\n', error.data); 
     }); 
    } 

} 

Я могу впрыснуть контроллер с этим кодом:

beforeEach(inject(($controller: angular.IControllerService) => { 
    mainController = $controller('MainController'); 
})); 
+0

is not module beforeEach (angular.mockule ('movieSearch')); должен быть до каждого (angular.mockule ('movieService')); ? – Sreekanth

+0

Спасибо за комментарий @Sreekanth! Это не проблема, после многих тестов, которые я уже обнаружил, посмотрите на мой собственный ответ. –

ответ

2

Приведенная ниже инъекция работает. Инъекция прямо в MovieService.

beforeEach(inject((MovieService: MovieService, $httpBackend: angular.IHttpBackendService, $log: angular.ILogService) => { 
    movieService = MovieService; 
    httpBackend = $httpBackend; 
    log = $log; 
    })); 

Но когда я делаю тест, используя инъекции на «это», как показано ниже

it('should be registered', inject((movie : MovieService) => { 
    expect(movie).not.toBeNull(); 
    })); 

Он не может решить эту вторую MovieService. Если я использую переменную movieService, указанную в примере 1. Как показано ниже:

beforeEach(inject((movieService: MovieService) => { 
    movieService = $httpBackend; 
})); 

it('should be registered', inject(() => { 
    expect(movieService).not.toBeNull(); 
}));