如何使测试用例等到before()执行完成?

时间:2019-03-31 17:05:04

标签: node.js async-await mocha

我正在使用Mocha框架在Node.js中编写测试。由于我正在测试的端点是异步的,因此我使用了aync-await概念。但是测试用例不是在等待before()执行部分完成运行,即;异步功能,因此显示listAll()api的结果错误。

async function fetchContent() {
    const [profile, user] = await Promise.all([api.profiles.list(), api.users.list()])

    params = {userId: user.items[0].id, label: 'Test', profileId: profile.items[0].id, token: authToken}
    testApi = new Api(params)
    testApi.profiles.create(params)
}

before(async () => {
    await fetchContent()
})

describe('Profiles API', () => {
    it('list profiles', done => {
        testApi.profiles.listAll().then(response => {
            console.log('list=', response)
        })
        done()
    })
})

我也像下面一样尝试过它(),但listAll()仍然不显示在before()执行过程中创建的配置文件记录:

describe('Profiles API', () => {
    it('list profiles', async () => {
                const response = await testApi.profiles.listAll()
                console.log('list=', response)
})

1 个答案:

答案 0 :(得分:1)

您应该await进行fecthContent内部的最后一次调用,因为它是异步的,否则测试将在完成之前开始。 beforeEach允许您返回承诺以等待其完成(请参阅Mocha文档)。

async function fetchContent() {
  const [profile, user] = await Promise.all([
    api.profiles.list(),
    api.users.list()
  ]);

  params = {
    userId: user.items[0].id,
    label: "Test",
    profileId: profile.items[0].id,
    token: authToken
  };

  testApi = new Api(params);

  // This call is asynchronous we have to wait
  await testApi.profiles.create(params);
}