При выполнении тестов функция не вызывается - PullRequest
0 голосов
/ 11 ноября 2019

У меня есть элементы управления, в которых есть функция обновления задачи.

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)

В чем может быть моя ошибка? Поскольку все остальные функции работают.

После некоторых попыток я заметил, что при удалении троичного оператора все тесты проходят успешно. Я не знаю, с чем это может быть связано.

1 Ответ

0 голосов
/ 11 ноября 2019

Поскольку updateTodo является асинхронной функцией, дождитесь разрешения Promise, прежде чем «ожидать» ответа.

Попробуйте что-то вроде:

const response = await  todosController.updateTodo(data);
//Then run your checks

В противном случае ожидаемая команда будет выполнена даже до разрешения обещания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...