То, чего вы пытаетесь достичь, на самом деле - интеграционное тестирование, потому что вы пытаетесь протестировать два блока (AppComponent
и SortService
) вместе.
Поскольку вы говорите о модульном тестировании, я думаю, вы хотите протестировать класс AppComponent
. Это означает, что любая инъецируемая зависимость, которая используется в AppComponent
, должна быть проверена. В вашем случае это класс SortService
. Есть два способа сделать это.
Подход 1: Использование класса Mock для SortService
.
app.component.spec.ts
// Mock the SortService class, its method and return it with mock data
class MockSortService extends SortService{
getSortData(data, rendererKey, type) {
return [someRandomArray];
}
}
beforeEach(async( () => {
TestBed.configureTestingModule({
providers: [
// Use the power of Angular DI with following provider. This will replace SortService with MockSortService in injector
{ provide: SortService, useClass: MockSortService },
]
});
));
Подход 2: Использование шпионского объекта.
app.component.spec.ts
beforeEach(async( () => {
// Create jasmine spy object
sortServiceSpy = jasmine.createSpyObj('SortService', 'sortNumberData');
// Provide the dummy/mock data to sortNumberData method.
sortServiceSpy.sortNumberData.returnValue([someRandomArray]);
TestBed.configureTestingModule({
providers: [
{ provide: SortService, useValue: sortServiceSpy},
]
});
));
Мне понравился подход 2. Он маленький и элегантный. Но вы можете использовать любой из двух подходов.
Надеюсь, это поможет!