Подтвердить что ты не робот

Тестирование просмотров, которые используют Devise с RSpec

Я пытаюсь передать ранее передаваемый rspec "view spec" для передачи после добавления метода Devise user_signed_in? к рассматриваемому шаблону. Шаблон выглядит примерно так:

<% if user_signed_in? %>
  Welcome back.
<% else %>
  Please sign in.
<% endif %>

Представленная спецификация вида выглядит примерно так:

require "spec_helper"

describe "home/index.html.erb" do

  it "asks you to sign in if you are not signed in" do
    render
    rendered.should have_content('Please sign in.')
  end

end

Ошибка, возникающая после добавления вызова на user_signed_in?, следующая:

  1) home/index.html.erb asks you to sign in if you are not signed in
     Failure/Error: render
     ActionView::Template::Error:
       undefined method `authenticate' for nil:NilClass
     # ./app/views/home/index.html.erb:1:in `_app_views_home_index_html_erb__1932916999377371771_70268384974540'
     # ./spec/views/home/index.html.erb_spec.rb:6:in `block (2 levels) in <top (required)>'

Есть много ссылок на эту ошибку в Интернете, но мне еще предстоит найти достаточно подробный ответ, чтобы я мог снова пройти тест. Я считаю, что проблема имеет какое-то отношение к представлению (которое тестируется изолированно от любых моделей/контроллеров), не имея какой-либо ключевой инфраструктуры Devise. Ваши предложения приветствуются.

Кроме того, как только тест пройдет, как бы я проверил другой путь (пользователь уже подписал)? Я предполагаю, что это будет очень похоже. Спасибо.

4b9b3361

Ответ 1

Ошибка, которую вы получаете, заключается в том, что вам нужно включить помощники тестового приложения

Как правило, вы добавите это (и у вас уже есть) в spec/support/devise.rb

RSpec.configure do |config|
  config.include Devise::TestHelpers, :type => :controller
end

Но поскольку вы создаете спецификацию вида, вам нужно что-то вроде этого:

RSpec.configure do |config|
  config.include Devise::TestHelpers, :type => :controller
  config.include Devise::TestHelpers, :type => :view
end

Ответ 2

Посмотрите на Rails Composer, это поможет вам в создании нового проекта рельсов с такими параметрами, как тестирование, интерфейс и т.д.

Создайте образец проекта, здорово, что он создаст все тесты для вас, включая тестирование показа с помощью. Затем вы можете получить представление от этих спецификаций тестирования.

работал у меня: D

HTH