2017-01-30 8 views
1

Я интегрировал Devise с моим приложением RoR, и теперь я пытаюсь проверить мои контроллеры, в частности тот, который перенаправляет меня на мой root_url.Devise Пользовательское тестирование с RSpec

Я использовал этот HOWTO на странице Devise для настройки моих администраторских/пользовательских заводов, но есть дополнительный компонент, который является частью моего процесса регистрации пользователей, который создает Company.

Итак:

User: has_one :company

Company: has_many :users

Поток для нового пользователя выглядит следующим образом:

  1. признаков пользователя до
  2. Пользователь подтверждает счет (по электронной почте) и перенаправляется на вход страница
  3. Журналы пользователя в
  4. Пользователь заполняет Company информацию и представляет
  5. Пользователь перенаправляется на 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 
+0

Это не ответ на ваш главный вопрос, но все же ... Ваша компания создана, но не сохраняется в БД. Это то, что нужно для стратегии:: build. Поэтому, чтобы создать свою компанию и сохранить ее в DB, ​​замените 'association: company, strategy:: build' только с' компанией'. Однако я постараюсь найти ответ на главный вопрос. Не могли бы вы добавить действие 'home' контроллера, который вы пытаетесь протестировать? – VAD

+0

@ VAD Только что добавил страницы # home controller method – Godzilla74

+0

Хорошо, получается, что это, вероятно, ответ на ваш основной вопрос. Теперь с исправлениями на фабрике 'user', которую я предположил, что у вас должен быть' current_user', и это 'компания' создана, поэтому ваше действие' home' не будет выполняться 'redirect_to' и вместо этого будет выполнять по умолчанию' render'. И ничто другое не должно препятствовать прохождению теста. Попробуйте, и если он пройдет, я добавлю свой предыдущий комментарий в качестве ответа. – VAD

ответ

1

Как мы выяснили, вместе в чате ... Ваш company был создан, но не сохраняется в БД. Это потому, что на вашем заводе было strategy: :build.

strategy: :build означает, что ваш объект ассоциации будет создан, но не будет сохранен для БД. Чтобы сохранить его, вы должны использовать strategy: :create.Или в вашем случае использования вы можете заменить association :company, strategy: :build только company. FactoryGirl достаточно умен, чтобы распознать его как ассоциацию, которая должна быть создана и сохранена.

И вы должны установить связь FactoryGirl между company и subscription таким же образом.