У меня есть элементы управления, в которых есть функция обновления задачи.
import { Controller, Post, Body, Get, Put, Delete, Param } from '@nestjs/common';
import { TodosService } from './todos.service';
import { Todos } from './todos.entity';
const message = { message: 'Entry not found' };
@Controller('todos')
export class TodosController {
constructor(private todosService: TodosService) {}
....
@Put('/update')
async updateTodo(@Body() todos: Todos): Promise<void | { message: string }> {
return (await this.todosService.getTodo(todos.id)) ? this.todosService.updateTodo(todos) : message;
}
....
}
Я хочу написать тест для этой функции.
import { Test, TestingModule } from '@nestjs/testing';
import { TodosController } from './todos.controller';
import { TodosService } from './todos.service';
import { Todos } from './todos.entity';
jest.mock('./todos.service');
describe('Todos Controller', () => {
let todosController: TodosController;
let todosService: TodosService;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
controllers: [TodosController],
providers: [TodosService],
}).compile();
todosController = module.get<TodosController>(TodosController);
todosService = module.get<TodosService>(TodosService);
});
describe('TodosController()', () => {
....
it('updateTodo() function should call', () => {
spyOn(todosService, 'updateTodo').and.callThrough();
const data: Todos = { id: 1, title: 'New title', author: 'Name 1', date: new Date('2019-11-18') };
todosController.updateTodo(data);
expect(todosService.updateTodo).toHaveBeenCalled();
});
....
});
});
Когда я запускаю тесты, я получаюошибка.
● Контроллер Todos ›Функция TodosController ()› updateTodo () должна вызывать
expect(spy).toHaveBeenCalled()
Expected number of calls: >= 1
Received number of calls: 0
55 | const data: Todos = { id: 1, title: 'New title', author: 'Name 1', date: new Date('2019-11-18') };
56 | todosController.updateTodo(data);
> 57 | expect(todosService.updateTodo).toHaveBeenCalled();
| ^
58 | });
59 |
60 | // it('deleteTodo() function should call', () => {
at Object.<anonymous> (todos/todos.controller.spec.ts:57:45)
В чем может быть моя ошибка? Поскольку все остальные функции работают.
После некоторых попыток я заметил, что при удалении троичного оператора все тесты проходят успешно. Я не знаю, с чем это может быть связано.