В сервисной спецификации курса удалите HttpTestingController из массива импорта, поскольку он не является модулем:
TestBed.configureTestingModule({
imports: [HttpClientTestingModule],
providers: [CourseService]
});
А также попробуйте использовать правильные обозначения объектов:
expectedCourses = [
{ id: 1, title: "Angular is Fun", author: "Son Goku", segments: [
{ id: 1, unit_id: 1, unit_title: "Components", name: "Lesson 1: Create Components", type: "Video", data: "www.hellokitty.com/angular1.flv" },
{ id: 2, unit_id: 1, unit_title: "Components", name: "Lesson 2: Decorators", type: "Video", data: "www.hellokitty.com/angular2.flv" },
{ id: 3, unit_id: 1, unit_title: "Components", name: "Lesson 3: Life Cycle", type: "Video", data: "www.hellokitty.com/angular3.flv" } ]
},
{ id: 2, title: "Ruby on Rails", author: "Monokuma", segments: [
{ id: 4, unit_id: 1, unit_title: "Introduction", name: "Lesson 1: Rails Console", type: "Video", data: "www.sdr2.com/rails1.flv" },
{ id: 5, unit_id: 2, unit_title: "Introduction", name: "Lesson 1: Gems", type: "Video", data: "www.sdr2.com/rails2.flv" } ]
},
{ id: 3, title: "Java", author: "Hououin Kyouma", segments: [
{ id: 6, unit_id: 1, unit_title: "Data Structures", name: "Lesson 1: Node", type: "Video", data: "www.deathnote.com/java1.flv" },
{ id: 7, unit_id: 1, unit_title: "Data Structures", name: "Lesson 2: Stack", type: "Video", data: "www.deathnote.com/java2.flv" },
{ id: 8, unit_id: 1, unit_title: "Data Structures", name: "Lesson 3: List", type: "Video", data: "www.deathnote.com/java3.flv" }]
}
] as ICourse[];
});
Вы можете видеть, что опечатка в обозначении объекта была: сегменты = [, который должен быть сегментами: [. Пожалуйста, исправьте во всех местах
Здесь я тоже вижу опечатку:
// Test getCoures()
it('should return all courses', () => {
courseService.getCourses().subscribe(
//was courses => expect(courses).toEqual(expectedCourses]))
//should be
courses => expect(courses).toEqual(expectedCourses)
)
});
UPDATE
Ошибка Ошибка: Не найдено никаких открытых запросов, найдено 1: GET localhost: 3000 / courses.json появляется, потому что вы ожидаете запросы в блоке afterEach:
// After every test, assert that there are no more pending requests.
afterEach(() => {
httpTestingController.verify();
});
Чтобы преодолеть эту проблему, вы можете использовать httpTestingController для имитации вызова запроса: https://angular.io/api/common/http/testing/HttpTestingController
Я могу помочь вам с первым, а с другими вам придется делать самостоятельно:
В спецификации сервиса:
it('should return all courses', (done) => {
courseService.getCourses().subscribe(
courses => {
expect(courses).toEqual(expectedCourses));
done();
}
const request = httpTestingController.expectOne('/courses.json');
request.flush(expectedCourses);
});
Для следующего утверждения используйте тот же подход.