Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2021 February 23

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
@xanf_ua Привет! Посмотрел видео доклад на твоем канале, по Jest. Но у меня немного другой вопрос. Есть реляционная БД и несколько resolver тестов, которые запускаются одновременно и все лезут в базу и начинают одновременно её сношать, в результате некоторые тесты падают из-за того что пред. тест изменил данные.
Ты не сталкивался с такой задачей, и если да, поделись пожалуйста как ты её решал?

Некоторые предлагают запускать тесты с ключем —runInBand, но признаться данный ключ как раз лишает нас преимущества подхода параллельного тестирования. У меня возникла такая мысль - на начальном этапе запуска тестов создавать для каждого резолвера отдельную бд с минимальной необходимой реляционной структурой и наполнением. Геморно конечно и придется поддерживать, но зато с соблюдением параллельного тестирования.
источник

N

Nikita in NodeUA - JavaScript and Node.js in Ukraine
Возможно, resolver тесты это какой-то вид тестов, о котором я не знаю, но тесты в базу не должны лезть
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Nikita
Возможно, resolver тесты это какой-то вид тестов, о котором я не знаю, но тесты в базу не должны лезть
У нас есть разные тесты, те что не лезут и те что как раз лезут
источник

N

Nikita in NodeUA - JavaScript and Node.js in Ukraine
а для чего нужно лезть в базу?
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Nikita
а для чего нужно лезть в базу?
Проверятся как отработал GraphQL
источник

V

Vladyslav Parashchen... in NodeUA - JavaScript and Node.js in Ukraine
Alexander
У нас есть разные тесты, те что не лезут и те что как раз лезут
Ну мы unit'ы запускаем паралельно. А интеграционные с БД с ключиком —runInBand. Вроде нормальный подход
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Vladyslav Parashchenko
Ну мы unit'ы запускаем паралельно. А интеграционные с БД с ключиком —runInBand. Вроде нормальный подход
👍 ну в принципе да, норм вариант. Тут еще из соседнего чата предложили просто вызывать ROLLBACK после каждого теста
источник

V

Vladyslav Parashchen... in NodeUA - JavaScript and Node.js in Ukraine
Alexander
👍 ну в принципе да, норм вариант. Тут еще из соседнего чата предложили просто вызывать ROLLBACK после каждого теста
Так тесты же полностью вроде паралельно запускаются. Так что пока один меняет, другой тоже работает с этой информацией
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
А вы что тестируете резолвер или правильность sql? Если резолвер, то замокайте данные и тестируйте резолвер
источник

V

Vladyslav Parashchen... in NodeUA - JavaScript and Node.js in Ukraine
Или несколько БД поднимать и разному процессу разную БД отдавать. В руби такой подход мы используем
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Alexander
А вы что тестируете резолвер или правильность sql? Если резолвер, то замокайте данные и тестируйте резолвер
У нас мокапы используются в интеграционных тестах, а на резолвер тестах проверяем саму целостность базы после запросов GraphQL
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Vladyslav Parashchenko
Или несколько БД поднимать и разному процессу разную БД отдавать. В руби такой подход мы используем
Ну вот я так и подумал
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Vladyslav Parashchenko
Или несколько БД поднимать и разному процессу разную БД отдавать. В руби такой подход мы используем
проще одну и делать таблицы с префиксами
источник

V

Vladyslav Parashchen... in NodeUA - JavaScript and Node.js in Ukraine
Alexander
проще одну и делать таблицы с префиксами
А как эти префиксы потом просовывать к ORM/query builder ?
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Alexander
проще одну и делать таблицы с префиксами
кстати да, тоже вариант👍
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Vladyslav Parashchenko
А как эти префиксы потом просовывать к ORM/query builder ?
select * from ${prefix}mytable
источник

V

Vladyslav Parashchen... in NodeUA - JavaScript and Node.js in Ukraine
А в основном коде ?
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Можно хоть через энв переменную или любым другим доступным способом
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Vladyslav Parashchenko
А в основном коде ?
так же, просто префикс будет пустой или другой
источник

V

Vladyslav Parashchen... in NodeUA - JavaScript and Node.js in Ukraine
Считаю неправильно когда в основном коде есть код который нужен лишь для тестов. Если это конфиг инициализации конекшина ещё ладно. Но везде нужно держать в уме этот префикс. Странное решение как по мне
источник