如何在玩笑的异步函数中引发错误

时间:2020-01-24 18:22:14

标签: javascript node.js jestjs

如何测试函数createTempUsageStatisticsTable(athenaExpress)是否引发错误,以及如何测试createTempUsageStatisticsTable(athenaExpress)是否由于函数athenaExpress.query(athenaQueryParam)引发错误(使用笑话)而引发错误? (假设文件名为index.js

async function createTempUsageStatisticsTable(athenaExpress) {
  let athenaQueryParam = {
      sql: getSqlQueries.CREATE_DEVICE_USAGE_STATS_TEMP_TABLE_QUERY,
      db: "testdb"
  };
      await athenaExpress.query(athenaQueryParam);
}
exportFunctions={createTempUsageStatisticsTable:createTempUsageStatisticsTable}

module.exports=exportFunctions

现在,我想编写一个测试来测试createTempUsageStatisticsTable(athenaExpress)在模拟实现中哪种合适或可行的情况下,当athenaExpress.query(athenaQueryParam)抛出错误或拒绝诺言时是否抛出错误,所以我做到了

    const confError = new Error('network error');
    athenaExpress.query = jest.fn().mockImplementationOnce(() => {
        throw new Error(confError);    // tried this 
        promise.reject(confError);
    })
    index.configureAthenaExpress();
    expect(index.configureAthenaExpress).toThrow();

但是测试似乎没有通过,请帮助

多亏了詹姆斯,我才能够正常工作,但是由于严格相等,由于出现一些错误,我稍微调整了他的代码,代码如下:

test("createTempUsageStatisticsTable throws an exception if 
    athenaExpress.query fails()", async () => {

    const creaError=new Error("network error")
    athenaExpress=configureAthenaExpress();
    athenaExpress.query.mockRejectedValueOnce(creaError);
    await expect(createTempUsageStatisticsTable(athenaExpress)).rejects.toBe(creaError);
  });

1 个答案:

答案 0 :(得分:1)

根据athenaExpress的导出方式,您可以模拟query进行抛出,然后通过利用rejects来测试说的存在。

const createTempUsageStatisticsTable = require("./createTempUsageStatisticsTable");
const athenaExpress = require("./athenaExpress");

jest.mock("./athenaExpress");

test("createTempUsageStatisticsTable throws if query fails", async () => {
  athenaExpress.query.mockRejectedValueOnce(new Error("network error"));
  await expect(createTempUsageStatisticsTable(athenaExpress)).rejects.toMatchObject({ message: "network error" });
});