Я интегрировал Devise с моим приложением RoR, и теперь я пытаюсь проверить мои контроллеры, в частности тот, который перенаправляет меня на мой root_url
.Devise Пользовательское тестирование с RSpec
Я использовал этот HOWTO на странице Devise для настройки моих администраторских/пользовательских заводов, но есть дополнительный компонент, который является частью моего процесса регистрации пользователей, который создает Company
.
Итак:
User
: has_one :company
Company
: has_many :users
Поток для нового пользователя выглядит следующим образом:
- признаков пользователя до
- Пользователь подтверждает счет (по электронной почте) и перенаправляется на вход страница
- Журналы пользователя в
- Пользователь заполняет
Company
информацию и представляет - Пользователь перенаправляется на
Pages#home
(который мойroot_url
)
Использование HOWTO DEViSE, я создал ControllerHelpers
файл в Support
:
module ControllerHelpers
def login_user
before(:each) do
@request.env["devise.mapping"] = Devise.mappings[:user]
user = FactoryGirl.create(:user)
user.confirm # or set a confirmed_at inside the factory. Only necessary if you are using the "confirmable" module
sign_in user
end
end
end
Я подозреваю, что что-то не так с моим User Factory
, так как не создается Company
, но я так новичок в RSpec, я не уверен.
FactoryGirl.define do
factory :user do
first_name "Test"
last_name "User"
full_name "Test User"
email "[email protected]"
phone_number "111-222-3333"
terms_accepted true
time_zone "Central Time (US & Canada)"
password "password"
password_confirmation "password"
confirmed_at Date.today
association :company
end
end
И у меня есть company.rb
завод, а также:
FactoryGirl.define do
factory :company do
id 1
name "ACME Test"
address_1 "123 Shady Lane."
address_2 "Suite 400"
city "Testville"
state "Test"
zip_code "12345"
has_payment_plan false
stripe_id "cus_34d434343e4e3e3"
locked false
end
end
Мой pages_controller_spec.rb
прост в данный момент:
требуют 'rails_helper'
RSpec.describe PagesController, :type => :controller do
describe "User: GET #home" do
login_user
it "signs in the user" do
expect(response).to render_template(:home)
end
end
end
Это приводит к после ошибки RSpec:
1) PagesController User: GET #home signs in the user
Failure/Error: expect(response).to render_template(:home)
expecting <"home"> but was a redirect to <http://test.host/companies/new>
# ./spec/controllers/pages_controller_spec.rb:10:in `block (3 levels) in <top (required)>'
Значит, это даже не делает часть моего теста? render_template
?
UPDATE: Добавлено Главная Контроллер
controllers/pages_controller#home
def home
if current_user && current_user.company
verify_subscription
get_company_and_locations
get_network_hosts
get_network_hosts_at_risk
@network_hosts_snip = @network_hosts_at_risk.sort_by{ |h| -h.security_percentage }.first(5)
get_company_issues
@issues = @issues.sort_by{ |i| -i.cvss_score }.first(5)
@deferred_issues = @company.deferred_issues.last(5)
@deferred_hosts = @company.deferred_hosts.last(5)
else
redirect_to new_company_path
end
end
Это не ответ на ваш главный вопрос, но все же ... Ваша компания создана, но не сохраняется в БД. Это то, что нужно для стратегии:: build. Поэтому, чтобы создать свою компанию и сохранить ее в DB, замените 'association: company, strategy:: build' только с' компанией'. Однако я постараюсь найти ответ на главный вопрос. Не могли бы вы добавить действие 'home' контроллера, который вы пытаетесь протестировать? – VAD
@ VAD Только что добавил страницы # home controller method – Godzilla74
Хорошо, получается, что это, вероятно, ответ на ваш основной вопрос. Теперь с исправлениями на фабрике 'user', которую я предположил, что у вас должен быть' current_user', и это 'компания' создана, поэтому ваше действие' home' не будет выполняться 'redirect_to' и вместо этого будет выполнять по умолчанию' render'. И ничто другое не должно препятствовать прохождению теста. Попробуйте, и если он пройдет, я добавлю свой предыдущий комментарий в качестве ответа. – VAD