保存后测试失败(在测试脚本配置中使用--watch),但是如果我手动重新运行,则测试通过了吗?

时间:2019-06-18 00:18:44

标签: javascript mongodb express jestjs

本质上不是一个大问题,但是我对导致这种行为的原因感到好奇。我正在编写一些非常基本的代码来学习如何进行测试。我正在使用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(反复按Entera时,测试始终可以通过-测试仅在我保存测试文件时失败,它会自动重新-由于--watch标志而运行。

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

在此先感谢您的浏览/提供的任何帮助!

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

1 个答案:

答案 0 :(得分:0)

--watch标志仅适用于github仓库。您应该添加watchAll

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

其余代码看起来不错。