Я хотел бы просто протестировать мой todo.service -метод:
create(listId: number, name: string): Observable<TodoItem[]> {
const URL = `${this.apiUrlService.getApiUrl('list')}${listId}/Item`;
return this.http.post(URL, { value: name }).pipe(concatMap(() => this.getAllTodoItemsByListId(listId)));
}
Как видите, это цепочечный http-вызов в сочетании с concatMap ();
Я закончил тем, что попробовал пару вещей, и это мое текущее состояние:
it('should create an todoItem', fakeAsync(() => {
const mockTodoItem = new TodoItem(1, 1, 'Test1');
let postResponse: TodoItem[];
todoItemService.create(1, 'NameOfList').subscribe((todoItems: TodoItem[]) => {
postResponse = todoItems;
});
tick();
httpMock
.expectOne({
url: `${apiUrlService.getApiUrl('list')}1/Item`,
method: 'POST',
})
.flush(mockTodoItem);
tick();
expect(postResponse).toEqual([mockTodoItem]);
httpMock.verify();
}));
Мой beforeEach ():
beforeEach(() => {
TestBed.configureTestingModule({
providers: [TodoItemService, { provide: ApiUrlService, useClass: ApiUrlService }],
imports: [HttpClientTestingModule],
});
todoItemService = TestBed.get(TodoItemService);
httpMock = TestBed.get(HttpTestingController);
apiUrlService = TestBed.get(ApiUrlService);
});
Я не получаю его внутриподписка.Если create -call выглядит так:
create(listId: number, name: string): Observable<TodoItem[]> {
const URL = `${this.apiUrlService.getApiUrl('list')}${listId}/Item`;
return this.http.post(URL, { value: name }));
}
, просто выполняя запрос POST, триггеры подписки запускаются.(Но, очевидно, не то, что я хочу) Итак, я получаю, что мне нужно каким-то образом смоделировать второй вызов GET?я.