保存时测试失败(在测试脚本配置中使用"--watch"),但如果我手动重新运行,它们就会通过?



本身不是一个大问题,但我很好奇是什么导致了这种行为。我正在编写一些非常基本的代码来学习如何进行一些测试。我正在使用 jestjs 来测试节点/快速应用程序,目前正在本地测试我的项目的开发版本。 所有版本都是最新的(最新的可用)。

在开玩笑的配置中,我有以下设置:

...
"test": "./node_modules/.bin/env-cmd -f ./config/test.env jest --watch"
},
"jest": {
"testEnvironment": "node",
"verbose": true
}

和我的环境配置(如env-cmd上面提到的):

PORT=3000
SENDGRID_API_KEY=<API KEY>
JWT_SECRET=<JWT SECRET>
MONGODB_URL=mongodb://127.0.0.1:27017/task-manager-api-test

--watch标志应该像nodemon一样工作 - 每当我保存测试文件时,它都会重新运行测试。问题似乎是,每当我保存文件时,一些测试都会失败(对于哪些测试失败相当不一致) - 但是如果我手动重新运行测试(--watch给了我一个 CLI,允许我通过按键重新运行测试)测试通过。

我在测试文件中使用以下方法,以确保在运行测试之前数据库实例中没有数据:

// User to seed DB
const testUserUID = new mongoose.Types.ObjectId()
const testUser = {
_id: testUserUID,
name: 'firstName lastName',
email: 'automatedTest@test.com',
password: 'test1234',
tokens: [{
token: jwt.sign({ _id: testUserUID }, process.env.JWT_SECRET)
}]
}
// Setup
beforeEach(async () => {
await User.deleteMany()
await new User(testUser).save()
})

我的一个测试示例:

test('Should signup a user', async () => {
await request(app)
.post('/users')
.send({
name: 'hardcodeFirst hardcodeLast',
email: 'hardcodeTest@test.com',
password: 'test1234'
})
.expect(201)
})

我遇到的一个更常见的错误是MongoError:

MongoError: E11000 duplicate key error collection: task-manager-api-test.users index: email_1 dup key: { : "automatedtest@test.com" }

抛出的其他错误与测试失败有关 - 所以我得到了测试不期望的值。

我尝试在谷歌上搜索一些与使用 jest 测试异步相关的东西,但我没有找到文档中未显示的有关如何使用 promise 或 async/await with jest 的内容。 我已经验证了我的环境变量没有指向我的远程数据库实例。 我已经在我的普通(非vscode)终端中运行了测试。 我还验证了使用--watchCLI 时测试始终通过(反复按Entera) - 测试仅在我保存测试文件时失败,并且由于--watch标志而自动重新运行。

与我的一位开发人员朋友交谈时,有人建议我可能以某种方式创建了某种竞争条件。如果是这样的话,这对我来说将是一个新的情况!

提前感谢您查看/提供的任何帮助!

编辑:包含.env我的测试环境

--watch标志仅适用于GitHub存储库。 你应该添加watchAll

"test": "env-cmd -f ./config/test.env jest --watch" 

其余代码看起来不错。

最新更新