Как проверить рендеринг шаблона node.js в шутку - PullRequest
0 голосов
/ 10 апреля 2019

Это один из моих маршрутов.

const actor = await Actor.findById(req.params.id);
if(!actor) throw new Error("Actor not found");
res.render('admin/actors/edit_actor',{actor:actor});

Дело в том, что я не знаю, как проверить, возвращается ли действительный актер из-за функции рендера.

=============================================== =================

Если я напишу следующее

const actor = await Actor.findById(req.params.id);
    if(!actor) throw new Error("Actor not found");
    res.send({actor:actor});

Я знаю, как это проверить, потому что этот актер будет в параметрах тела. такие как:

// тест

const res = await request(server).get('/actor/2');

res.body - тот же актер

Итак, вопросы:

1) как мне протестировать первый пример, который отображает какое-то представление?

2) первый пример для тестирования - необходим интеграционный тест и для второго примера мы должны написать функциональный тест. Я прав?

1 Ответ

0 голосов
/ 10 апреля 2019

В модульном тесте вы должны смоделировать свои зависимости, поэтому, если вы тестируете свой контроллер, вы должны смоделировать объекты req и res, а также модель.Например

Реализация

import Actor from '../model/Actor';

const controller = (req, res) => {
  const actor = await Actor.findById(req.params.id);
  if(!actor) throw new Error("Actor not found");
  res.render('admin/actors/edit_actor',{actor:actor});
}

Модульный тест

import Actor from '../model/Actor';

jest.mock('../model/Actor');

describe('controller', () => {
  const req = {
    params: { id: 101 }
  };

  const res. = {
    render: jest.fn()
  };

  beforeAll(() => {
    Actor.findById.mockClear();
    controller(req, res);
  });

  describe('returning an actor', () => {
    beforeAll(() => {
      res.render.mockClear();
      Actor.findById.mockResolvedValue({
        name: "Some Actor"
      });
      controller(req, res);
    });

    it('should get actor by id', () => {
      expect(Actor.findById).toHaveBeenCalledWith(101);
    });

    it('should call res.render', () => {
      expect(res.render).toHaveBeenCalledWith('admin/actors/edit_actor', { actor });
    })
  });

  describe('not returning an actor', () => {
    beforeAll(() => {
      res.render.mockClear();
      Actor.findById.mockResolvedValue(undefined);
      controller(req, res);
    });
    it('should throw an Error', () => {
      expect(() => controller(req, res)).toThrow(Error);
    });

    it('should not call res.render', () => {
      expect(res.render).not.toHaveBeenCalled();
    });
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...