Тесты - 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
letvslet!
letзагружается лениво: он не создается до тех пор, пока RSpec не дойдет до первого метода, который использует этот объект. При этом значение объекта запоминается, и в рамках 1-го теста сохраняет одно и то же значение, но не сохраняет его между двумя тестами в одном файле. Например, если написатьlet(:count) { $count += 1 }, то в первомitcountвсегда будет 1, а во второмit- уже 2.letсоздает объект там, где он первый раз встречается после строки, где он прописан, сохраняет значение в рамках первого теста, но меняется/не сохраняется в других тестах того же файла.
letwill not actually do anything until the object is being called anywhere in your specslet!создаёт объект на месте - сразу в той строке, где написан (не ожидая, когда его где-то вызовут ниже). Принудительно создает объект сразу, выполняется сразу после объявления. Полезен для заполнения базы необходимыми данными, которые будут гарантированно доступны на момент выполнения теста.
Links: