具有依赖项的 Angular 测试服务

Teo*_*rov 8 jasmine karma-jasmine angular

我有一个依赖于另一个服务的服务。我想测试一下。

我的服务:

@Injectable()
export class LanguageService {
constructor(private translate: TranslateService) {

}
Run Code Online (Sandbox Code Playgroud)

我的测试:

describe('LanguageService', () => {
let service: LanguageService;
beforeEach(() => {
TestBed.configureTestingModule({
  providers: [LanguageService]
});

service = TestBed.get(LanguageService);
});

it('should set a preferred language', () => {
  // Some test
});
});
Run Code Online (Sandbox Code Playgroud)

当我运行测试时,我得到No provider for TranslateService。TranslateService 依赖于其他依赖等。

如何添加 TranslateService 依赖项?有没有办法在不列出其众多依赖项的情况下做到这一点?

Teo*_*rov 5

问题是我在 LanguageService 中使用 ngx-translate 。它需要一些进口才能工作。在我将它们包含在内之后,效果很好。

beforeEach(() => {
TestBed.configureTestingModule({
  imports: [HttpClientModule,
    TranslateModule.forRoot({
      loader: {
        provide: TranslateLoader,
        useFactory: HttpLoaderFactory,
        deps: [HttpClient]
      }
    })],
  providers: [LanguageService]
});
Run Code Online (Sandbox Code Playgroud)


Mik*_*ung 2

您可以模拟依赖关系

describe('LanguageService', () => {
let service: LanguageService;
class fakeService {};
beforeEach(() => {
TestBed.configureTestingModule({
  providers: [LanguageService, {provide: TranslateService, useValue: fakeService}],
});

service = TestBed.get(LanguageService);
});

it('should set a preferred language', () => {
  // Some test
});
});
Run Code Online (Sandbox Code Playgroud)