0

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

在 jest 的配置中,我有以下设置:

...
    "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 测试异步相关的东西,但我没有发现文档中没有显示关于如何使用 promises 或 async/await with jest 的任何内容。我已经验证我的环境变量没有指向我的远程数据库实例。我已经在我的普通(非 vscode)终端中运行了测试。我还验证了使用--watchCLI(按下Entera重复)时测试总是通过 - 只有当我保存测试文件时测试才会失败,并且由于--watch标志而自动重新运行。

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

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

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

4

1 回答 1

0

--watchflag 仅适用于 github repos。你应该添加watchAll

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

您的其余代码看起来不错。

于 2019-08-06T15:29:31.023 回答