Несколько звонков в гости с помощью RSpec и Capybara

#ruby-on-rails #ruby #rspec #capybara

#ruby-on-rails #ruby #rspec #капибара #capybara

Вопрос:

У меня есть спецификация запросов, которая выполняет несколько вызовов для посещения в пределах одного блока (посещения ‘/ sessions / new’ и посещения ‘/ admin’). Это приводит к:

 ActionView::Template::Error:
       undefined local variable or method `view_factory' for #<#<Class:0x007fedda1d5180>:0x007fedda1bb118>
  

Есть ли способ это исправить? Спасибо. Код:

 describe "Admin" do

  before do
    visit new_session_path
    fill_in "Email",    with: user.email
    fill_in "Password", with: user.password
    click_button "Submit"
  end

  describe "GET /admin" do
    it "should be successful" do
      visit admin_dashboard_path
    end
  end

end
  

Обновить:

После некоторого поиска я обнаружил, что ошибки возникают только при запуске с Spork. Вот мой spec_helper.rb файл, который настраивает Spork:

 require 'rubygems'
require 'spork'
require 'simplecov'

ENV["RAILS_ENV"] ||= 'test'

SimpleCov.start if ENV["COVERAGE"]

Spork.prefork do

  require File.expand_path("../../config/environment", __FILE__)
  require 'rspec/rails'
  require 'capybara/rspec'

  Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

  RSpec.configure do |config|
    config.mock_with :mocha

    config.include Auth::Helper
  end

end
  

Комментарии:

1. это работает всего с одним звонком в гости? Я бы предположил, что что-то настроено неправильно, но тогда вы бы тоже не смогли запустить первый визит….

2. @froderik Да, я тоже так думаю. Я только что понял, что он терпит неудачу только при запуске с Spork ( github.com/timcharper/spork ).

3. Есть прогресс в этом? У меня такая же проблема: ошибка возникает только при использовании spork и, похоже, связана с ActiveAdmin

4. @hubble, насколько мне известно, нет.

5. Suuuuxxxx … я застрял при запуске rspec без spork / guard: (

Ответ №1:

У меня была похожая проблема, и я нашел небольшое обходное решение. Я предполагаю, что view_factory это вспомогательный метод, определенный в плагине, и он включен в помощник приложения с чем-то вроде ActionController::Base.helper FactoryHelperModule .

Что я сделал, так это включил следующий фрагмент в мое приложение / helpers/application_helper.rb:

 if Rails.env.test?
  include FactoryHelperModule
end
  

Если вспомогательные методы находятся в модуле и если вспомогательные методы объявлены как у меня, есть шанс, что это сработает. Я еще не нашел, почему это происходит.

Кстати, я на rails 3.0.4 и spork 0.9.0.rc9

Ответ №2:

Не знаю, решит ли это вашу проблему, но before должно быть внутри блока, переданного describe :

 describe "GET /admin" do
  before do
    visit new_session_path
    fill_in "Email",    with: user.email
    fill_in "Password", with: user.password
    click_button "Submit"
  end

  it "should be successful" do
    visit admin_dashboard_path
  end
end
  

Комментарии:

1. Извините, код, который я вставил, был всего лишь фрагментом из полной спецификации. Он содержит описание всего (и, следовательно, before разрешено там, где оно есть). Я обновил пример.

Ответ №3: