Поэтому я пытаюсь настроить свой проект с помощью Jest / Spectator, так как это кажется очень аккуратным способом разработки тестов, но у меня возникают проблемы с зависимостями для моих компонентов и сервисов. И полностью их высмеивать - не главная проблема, главная проблема - изменить их поведение, чтобы делать разные вещи.
Скажем, у меня есть служба, которая что-то возвращает, в моих текущих тестах, которая всегда кажется неопределенной , И когда он является наблюдаемым (например, возвращает массив с ReplaySubject) или любым связанным объектом, он, похоже, не работает. Или когда я хочу узнать, сколько раз был сделан вызов (или с какими параметрами), он, кажется, не совпадает. Я знаю, что для Jest загружаются разные модули, и что синтаксис для Jest отличается от синтаксиса Karma / Jasmine (например, mockReturnValue вместо .and.returnValue), но он все равно не работает и не нарушает тесты.
А для того, чтобы дочерние компоненты менялись в зависимости от вводимых мной данных или запуска событий onChange, все это очень трудно выяснить, каким образом он должен go. То же самое, когда вы добавляете маршрутизацию к миксу, все кажется неудачным, когда вы хотите попытаться сделать вещи динамичными c.
Документация от Jest и Spectator кажется довольно простой c и не на самом деле это не та часть, с которой вы начинаете использовать эту вещь. Мне нужно было разобраться в проблемах, чтобы понять, что и из-за чего довольно сложно разобраться.
Итак, какие примеры следует использовать, какие передовые методы использовать и на чем можно опираться? В основном я смотрю, как правильно смоделировать сервисы, чтобы я мог изменить поведение своих компонентов или сервисов в зависимости от того, как они взаимодействуют с другими. Единственный способ, который я нашел для выполнения любого теста, - это полностью смоделировать все это, но тогда я не очень хорошо тестирую содержимое своих компонентов.
Я знаю, что Jest / Spectator не Angular по умолчанию, но я не любил Карму / Жасмин в течение долгого времени и хотел попробовать что-то другое.
Скажем, у меня есть такой сервис:
import { Injectable } from '@angular/core';
import { ReplaySubject, Observable } from 'rxjs';
/**
* Some Service to do stuff
*/
@Injectable({
providedIn: 'root',
})
export class SomeService {
private myData: string[]; // some data that gets managed here
private _name$ = new ReplaySubject<string[]>(); // some name that gets updated by different components/services
nameObservable: Observable<string[]>; // for example when it is set without a function (though I did see there were issues with this)
constructor() {
this.nameObservable = this._name$.asObservable(); // for when values get set in the constructor
}
// this is a function that gets called from somewhere else
setName(name: string): void {
this._name$.next([name]);
}
setMyData(): void {
// this data can come from somewhere else in the application but I want to mock whatever this returns.
this.myData = ['stuff'];
}
getSomeData(stuff: string): string {
return stuff + 'otherStuff';
}
}
Как мне издеваться это в другом тесте, когда это зависимость и изменить свой вывод? У меня либо проблемы с подпиской на результаты, либо функции не существуют. Даже зритель становится неопределенным. Но вместо того, чтобы просто исправить мою текущую проблему, я хотел бы знать, каков будет нормальный способ работы.
Итак, в одном тесте:
- Как бы я изменился вывод этой зависимости для получения различных данных в моих Angular тестах, использующих Jest + Spectator?
- Как бы я смоделировал эту зависимость для тестов, которые не включают эту зависимость (учитывая, что существуют тесты, которые делают )?
- Как проверить, были ли вызваны функции и с какими параметрами? (шпион или что-то в этом роде)
Конечно, я мог бы go вернуться к Карме / Жасмин и сбросить Spectator, но я думаю, что с некоторой помощью я могу не только заставить мои тесты работать, но и обновить документацию для зрителя и / или Jest, поскольку я чувствую, что части отсутствуют, и пока нет достаточного количества вопросов об этой комбинации. Видя, насколько быстры тесты и насколько легко их отладить (учитывая, что вы знаете, что делаете и какой синтаксис должен быть), я не сомневаюсь, что это скоро станет более популярным ...