首页 > 解决方案 > 使用 Jest 进行 neo4j Node js 单元测试

问题描述

我使用 Jest 框架来创建单元测试。当我运行它们时。最后有消息:

“测试运行完成后一秒钟 Jest 没有退出。这通常意味着在您的测试中没有停止异步操作。考虑运行 Jest--detectOpenHandles以解决此问题。”

要退出,我使用命令“--forceExit”。另外,我试图找到一个问题--detectOpenHandles,但它没有显示任何内容。

我找不到它没有关闭的东西,会话或驱动程序,或其他东西。怎么可能修好?

const neo4j = require("neo4j-driver");
const driver = neo4j.v1.driver(
  `bolt://${host}`,
  neo4j.v1.auth.basic(username, password)
);

beforeAll(async () => {
  await cleanDB();
});

afterAll(async () => {
  await cleanDB();
  driver.close();
});

async function cleanDB() {
  await runQuery(`...query`);
}

async function runQuery(query) {
  const session = driver.session();
  return session
    .writeTransaction(tx => tx.run(query))
    .then(result => {
      session.close();
      return result;
    })
    .catch(error => {
      session.close();
      return { error };
    });
}

describe(`bla-bla-bla`, function() {
  beforeAll(async () => {
    await dataBaseLoader(data);
  });

  test(`bla-bla-bla`, async function() {
    const result = await runQuery(
    '...query' );
   //Body of Test
    expect(result).toStrictEqual(expected);
  });

标签: javascriptnode.jsneo4jjestjs

解决方案


如果您不在正文中使用等待,则无需在函数之前使用异步,如果函数不是异步访问它而不等待

function cleanDB() {
  runQuery(`...query`);
}

function runQuery(query) {
  const session = driver.session();
  return session
    .writeTransaction(tx => tx.run(query))
    .then(result => {
      session.close();
      return result;
    })
    .catch(error => {
      session.close();
      return { error };
    });
}

等等,检查你所有的功能,也许它会有所帮助


推荐阅读