#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 разрешено там, где оно есть). Я обновил пример.