【问题标题】:Using beforeEach to insert dummy data使用 beforeEach 插入虚拟数据
【发布时间】:2020-02-12 16:12:59
【问题描述】:

当我使用beforeEach() 将虚拟数据插入数据库时​​,我收到此错误:

错误:超过 2000 毫秒的超时。对于异步测试和钩子,确保调用了“done()”;如果返回 Promise,请确保它已解决。

当我删除beforeEach() 调用并尝试任何测试用例时,它可以工作。那么有人能展示如何正确使用beforeEach()吗?

这是我的数据:

let dummyData = [{
    username: "ali",
    pasword: "ali",
    email: "ali@gmail.com"
}, {
    username: "joe",
    pasword: "joe",
    email: "joe@gmail.com"
}
]

这是我的beforeEach 电话:

beforeEach(async function (done) {
    try {
        let result = await User.remove({});
        User.insertMany(dummyData);
    } catch (err) {
        return done(err)
    }
})

【问题讨论】:

    标签: mocha.js supertest


    【解决方案1】:

    问题是你没有在你的beforeEach()中调用done()

    在您的代码中,done() 仅在出现错误时才被调用,但您也需要在 try 中调用。如果代码从未到达catch 块,则永远不会调用done()

    顺便说一句,done() 不是必须的,所以你也可以不使用。所以你有两个选择:

    1:在insertMany()之后调用done()

    beforeEach(async function (done) {
        try {
            let result = await User.remove({});
            User.insertMany(dummyData);
            done() // <-- This line
        } catch (err) {
            return done(err)
        }
    })
    

    2:不调用done()(如果await执行2000ms,测试不会失败):

    beforeEach(async function () {
        try {
            let result = await User.remove({});
            User.insertMany(dummyData);
        } catch (err) {
            // do whatever you want
        }
    })
    

    但我想你想使用done() 来确保结果正确,所以我认为第一个选项更适合你的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-20
      • 2011-04-03
      • 2015-02-06
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多