Я пишу очень простой тест: отображается ли моя страница, когда мои пользователи вошли в систему? Я использую Factory для создания тестового пользователя и запрашиваю проверить случай:
FactoryBot.define do
sequence(:login) {|n| "user#{n}"}
sequence(:email) {|n| "user#{n}@gmail.com"}
factory :user do
playground_id {0}
default_playground_id {0}
group_id {0}
first_name {"user"}
last_name {"test"}
user_name {FactoryBot.generate :login}
email {FactoryBot.generate :email}
password {"DQtest_user01"}
password_confirmation {"DQtest_user01"}
description {"This is a test User used for unit testing"}
created_by {"Rspec"}
updated_by {"Rspec"}
active_from {"2010.01.01"}
active_to {"2100.01.01"}
confirmed_at {Time.now}
end
end
Если вы вошли в систему, шаблон индекса должен отображаться, в противном случае мы будем перенаправлены на форму sign_in (на основе Devise)
require 'rails_helper'
RSpec.describe BusinessArea, type: :request do
describe "Business Areas pages: " do
context "when not signed in " do
it "should propose to log in" do
get "/business_areas/index"
follow_redirect!
expect(response.body).to include('Sign in')
end
end
context "when signed in" do
before do
get "/users/sign_in"
test_user = FactoryBot.create(:user)
post "/users/sign_in", :params => { user_login: test_user.user_name, user_password: test_user.password}
end
it "should display index" do
get "/business_areas/index"
expect(response).to render_template(:index)
end
end
end
end
Форма, сгенерированная для входа, предоставляет Devise следующие поля:
<label for="user_login">Login</label><br />
<input autofocus="autofocus" type="text" name="user[login]" id="user_login" />
<label for="user_password">Password</label><br />
<input autocomplete="off" type="password" name="user[password]" id="user_password" />
Запуск теста возвращает это сообщение:
Неудачи:
1) Страницы BusinessArea Business Areas: при входе должно отображаться
индекс
Ошибка / Ошибка: ожидаем (ответ). To render_template (: index)
ожидал <"index">, но был редирект на http://www.example.com/users/sign_in
# ./spec/requests/business_areas_spec.rb:21:in `блок (4 уровня) в '
Завершено за 0,17126 секунды (загрузка файлов заняла 2,24 секунды) 2
примеры, 1 сбой
Это выглядит довольно просто, но я не понимаю, почему он не входит в систему?
Или это другая проблема? Пользователь действительно создан, как я могу быть уверен, что FactoryBot успешен?
Спасибо за вашу помощь.