如何对以res.send(200,object)结尾的javascript函数进行单元测试

如何对以res.send(200,object)结尾的javascript函数进行单元测试,javascript,unit-testing,asynchronous,Javascript,Unit Testing,Asynchronous,我正在尝试对下面的函数getAllPeopleFromDB进行单元测试: export const getAllPeopleFromDB = async (req, res) => { const people = await getAllAustralianPeopleFromDB(); res.send(200, people); }; 问题是,我不知道如何处理res.send200,最后的人 以下是我的尝试,这可能有用,也可能无用: // datastoreServic

我正在尝试对下面的函数getAllPeopleFromDB进行单元测试:

export const getAllPeopleFromDB = async (req, res) => {
  const people = await getAllAustralianPeopleFromDB();
  res.send(200, people);
};
问题是,我不知道如何处理res.send200,最后的人

以下是我的尝试,这可能有用,也可能无用:

  // datastoreService.getAllAustralianPeopleFromDB = jest.fn().mockImplementation(() => (
  //   new Promise(resolve => resolve('stub'))
  // ));

  // describe('getAllPeopleFromDB', () => {
  //   test('that body contains people and has 200 status', (done) => {
  //     req = {};
  //     res = {};

  //     getAllPeopleFromDB(req, res).then((response) => {
  //       expect(response).toContain(['stub', 200]);
  //       done();
  //     });
  //   });
  // });
您可以在res对象上定义一个.send方法,该方法接受一个数据参数,并存储发送的数据,以便检查其值。您的测试代码当前检查传递给的数据。然后,由于getAllPeopleFromDB不解析值,该数据将是未定义的

相反,请尝试:

describe('getAllPeopleFromDB', () => {
    test('that body contains people and has 200 status', (done) => {

        let responseData = ''
        const req = {};
        const res = {send: function(status, data) {responseData = data}};

        getAllPeopleFromDB(req, res).then(() => {
          expect(responseData).toContain('whatever');
          done();
        });
    });
});

使res.send成为mock/spy/stub,并验证是否使用预期的数据调用它。My eslint E6语法不接受res={send:data=>responseData=data};只是为了阻止ESLint抱怨而进行了编辑,但我只能猜测你的linter设置可能是什么,所以不能保证。