本质上不是一个大问题,但是我对导致这种行为的原因感到好奇。我正在编写一些非常基本的代码来学习如何进行测试。我正在使用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的任何东西。我已经验证我的环境变量没有指向我的远程数据库实例。我已经在普通(非vscode)终端中运行了测试。我还验证了使用--watch
CLI(反复按Enter
或a
时,测试始终可以通过-测试仅在我保存测试文件时失败,它会自动重新-由于--watch
标志而运行。
与我的一位开发伙伴交谈时,有人建议我可能以某种方式创建了某种竞赛条件。如果是这样的话,那对我来说将是一个新情况!
在此先感谢您的浏览/提供的任何帮助!
编辑:在我的测试环境中包含.env
答案 0 :(得分:0)
--watch
标志仅适用于github仓库。您应该添加watchAll
"test": "env-cmd -f ./config/test.env jest --watch"
其余代码看起来不错。