Тесты - Evanto/qna GitHub Wiki
- Betterspecs - большой полезный ресурс по тестированию с RSpec.
- Если в фабрике верно указанные связные сущности, то при вызове
let(:answer) { create(:answer) }
кромеanswer
будут созданы такжеquestion
иuser
, к которым можно обращаться черезanswer.question
иanswer.user
. Если же нужно создать ответ для конкретного пользователя, то сначала создаётсяuser
, а потомanswer
:
let(:user) { create(:user) }
let(:answer) { create(:answer, user: user) }
- RSpec
let
vslet!
let
загружается лениво: он не создается до тех пор, пока RSpec не дойдет до первого метода, который использует этот объект. При этом значение объекта запоминается, и в рамках 1-го теста сохраняет одно и то же значение, но не сохраняет его между двумя тестами в одном файле. Например, если написатьlet(:count) { $count += 1 }
, то в первомit
count
всегда будет 1, а во второмit
- уже 2.let
создает объект там, где он первый раз встречается после строки, где он прописан, сохраняет значение в рамках первого теста, но меняется/не сохраняется в других тестах того же файла.
let
will not actually do anything until the object is being called anywhere in your specslet!
создаёт объект на месте - сразу в той строке, где написан (не ожидая, когда его где-то вызовут ниже). Принудительно создает объект сразу, выполняется сразу после объявления. Полезен для заполнения базы необходимыми данными, которые будут гарантированно доступны на момент выполнения теста.
Links: