Тесты не выполняются, когда я сохраняю (используя `--watch` в конфигурации сценария тестирования), но если я перезапущен вручную, они проходят? - PullRequest
0 голосов
/ 18 июня 2019

Не большая проблема сама по себе, но мне любопытно, что является причиной такого поведения.Я пишу очень простой код, чтобы узнать, как провести тестирование.Я использую 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 для моей тестовой среды

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...