Teodor Dimitrov
Teodor Dimitrov

Reputation: 1023

Angular test service with dependencies

I have a service which depends on another service. I want to test it.

My Service:

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

}

My Test:

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

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

it('should set a preferred language', () => {
  // Some test
});
});

When I run the test I get No provider for TranslateService. TranslateService depends on other dependencies and so on.

How can I add TranslateService dependency? Is there a way to do it without listing its numerous dependencies too?

Upvotes: 10

Views: 9376

Answers (2)

Teodor Dimitrov
Teodor Dimitrov

Reputation: 1023

The problem was that I was using ngx-translate inside my LanguageService. It needs some imports in order to work. After I've included them it worked fine.

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

Upvotes: 5

Mike Tung
Mike Tung

Reputation: 4821

You can mock the dependency

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
});
});

Upvotes: 2

Related Questions