如何模拟此方法?

时间:2019-04-01 16:19:54

标签: javascript node.js jestjs fastify

我想模拟下面的代码行。并请解释一下我是javascript新手和编写测试用例时如何详细模拟这一点。以下代码将返回一个承诺。

const createPriceConfiguration = (fastify, req) => {
  return fastify.pg.transact(client => insertQuery(fastify, client, req));
};

const client = {
   query: jest.fn(() => {
        return new Promise(resolve => {
          resolve({ rows: [req.body] });
        });
      })
    };

我的同事提供了一个我无法理解的解决方案。

transact: jest.fn(queryFunction => {
        return queryFunction(client);
      })

1 个答案:

答案 0 :(得分:0)

您要测试createPriceConfiguration对象,该函数接受fastify对象并从中调用函数。可以通过模拟fastify对象来模拟此功能。您需要在传递的transact对象中模拟fastify方法,以返回所需的响应(例如,promise或其他函数的结果,...)

const mockedFastify = {
  pg: {
    transact: jest.fn(() => new Promise(resolve => {
      ...desired code
    }))
  }
};

然后在测试用例中,您传递了模拟对象createPriceConfiguration(mockedFastify);