Не большая проблема сама по себе, но мне любопытно, что является причиной такого поведения.Я пишу очень простой код, чтобы узнать, как провести тестирование.Я использую 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, который позволяет мне повторно запускать тесты нажатием клавиши), тесты пройдут.
Я использую следующее в своем тестовом файле, чтобы убедиться, что экземпляр DB не содержит данных перед запуском тестов:
// 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, но я не нашел ничего, что не показано в документации о том, как использовать обещания или async / await с помощью jest.Я проверил, что мои переменные окружения не указывают на мой удаленный экземпляр БД.Я запустил тесты в моем обычном (не vscode) терминале.Я также проверил, что тесты всегда проходят при использовании --watch
CLI (повторное нажатие Enter
или a
) - тесты дают сбой, только когда я сохраняю тестовый файл, и он автоматически перезапускается из-за --watch
flag.
В разговоре с одним из моих друзей-разработчиков было высказано предположение, что я, возможно, каким-то образом создал какое-то состояние гонки.Для меня это было бы новой ситуацией, если бы это было так!
Заранее благодарим за то, что взглянули на любую предложенную помощь!
РЕДАКТИРОВАТЬ: Включено .env
для моей тестовой среды