繁体   English   中英

如何在jest中测试node.js模板渲染

[英]how do I test node.js template render in jest

这是我的路线之一。

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

问题是我不知道如何测试是否因为渲染功能而返回有效的actor。

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

如果我写下面的内容

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

我知道如何测试这个,因为这个actor会在body参数中。 如:

//测试

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

res.body和actor一样

所以问题:

1)如何测试渲染某些视图的第一个示例?

2)测试需要进行集成测试的第一个例子。 对于第二个例子,我们应该编写功能测试。 我对吗?

在单元测试中,你应该模拟你的依赖项,所以如果你正在测试你的控制器,你应该模拟reqres对象以及模型。 例如

履行

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();
    });
  });
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM