Получил пару проблем с моим тестированием устройства с помощью жасмина. Первый из них:Угловой 2 модульный тест
Мне нужно, чтобы проверить это в компонент под названием CaseList:
gotoDetail(case: Case){
this._router.navigate(['CaseDetail', {"id": case.id}]);
}
Все мои попытки испытаний дают погрешность this._router неопределен, так это потому, что я не определил его в моем тесте, поскольку я не могу понять, как! Я даже не придумал никаких хороших попыток на тестах, поскольку я понятия не имею, как действовать дальше. Вот почему я не добавил ни одной попытки ...
Редактировать: часть в тесте маршрутизатора, которая связана с проблемой выше, но я проверяю всю маршрутизацию в отдельном файле! Этот тест работает!
it('Should navigate to Case Detail List', (done) => {
router.navigate(['CaseDetail', {id: 'test'}]).then(() => {
expect(location.path()).toEqual('/casedetail/test');
done();
}).catch(e => done.fail(e));
});
Вторые тесты из Деталь компонентов (где пользователь управление судном после выбора случая):
addStep(){
this.case.getSteps().push(new Step());
}
У меня также есть метод удалить мне нужно тест:
removeStep(step: Step){
this.case.removeStep(step);
}
Конструктор этот компонент:
constructor(public _routeParams: RouteParams, public _service: Service) {
this.case = _service.getById(_routeParams.get('id'));
}
Так что тест, который я попытался сделать для надстройки методы:
it('passes new step to case-class',() => {
spyOn(case, 'addStep')
.and.returnValue(Observable.of({complete: true}))
caseDetail.addStep();
expect(case.addStep).toHaveBeenCalledWith(step);
});
Таким образом, эти методы вызывают методы, которые находятся в отдельном классе под названием «Дело».
Ошибка, которую я получаю при тестировании, в этом случае равна нулю. Я предполагаю, что маршрутизация и обслуживание испортили его, так как в том же Компоненте у меня есть другие «идентичные» методы, и тестирование этих работ прекрасное. Но они принадлежат к другому классу.
метод в одном компоненте, обращаясь к «Шаг» -класса:
addFeedback(step: Step){
step.addFeedback(new Feedback());
}
Тестирование работает отлично:
it('passes feedback value to Step class',() => {
spyOn(step, 'addFeedback')
.and.returnValue(Observable.of({complete: true}))
caseDetail.addFeedback(step);
expect(step.addFeedback).toHaveBeenCalledWith(feedback);
})
Так, очевидно, в тестировании компонент я должен иметь все, что определено необходимо, так как работает тестирование метода обратной связи. Мне просто нужно как-то определить объект «case», чтобы он не жаловался на то, что он является нулевым.
Ну, надеюсь, вы получите мою проблему под рукой и, надеюсь, вы сможете помочь! :)
У меня есть отдельный тест для маршрутизатора, практически идентичную вашему примеру. Это прекрасно работает. Я не уверен, что вы имеете в виду «добавить маршрутизатор и корпус в качестве поставщика перед тестированием».Я действительно новичок в кодировании, и это моя первая попытка модульного тестирования;) Добавлен тест маршрута, связанный с моей первой «проблемой» - «gotodetail» в моем исходном вопросе. Как сказал маршрут тест работает отлично! Но мне нужно проверить «gotodetail» в компоненте, и я не уверен, как определить там маршрутизатор? Нужно ли мне добавлять весь этот код там, чтобы проверить «gotodetail»? – Alex
Или мне нужно проверить «goToDetail» вообще, так как маршрут протестирован? Думаю, я немного смущен. И вторая проблема также остается, если она равна нулю, поэтому, если у кого-то есть какие-то идеи, это было бы очень полезно :) – Alex
Если вы просматриваете маршруты внутри вашего модульного теста, тогда да, вам понадобится весь код. Для случая, когда null, я не слишком уверен, в каком случае, но вы можете попробовать добавить случай в качестве провайдера перед модульным тестом. – xphong