我有一个请求规范,可以在一个块内进行多次访问(访问'/ 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运行时才会出现错误。这是配置Spork的spec_helper.rb
flile:
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
答案 0 :(得分:1)
我遇到了类似的问题并找到了一些解决方法。我假设view_factory
是一个插件中定义的辅助方法,它包含在ActionController::Base.helper FactoryHelperModule
之类的应用程序助手中。
我所做的是将以下代码段包含在我的app / helpers / application_helper.rb中:
if Rails.env.test?
include FactoryHelperModule
end
如果辅助方法在模块中,如果辅助方法被声明为我的,那么这可能会有效。我还没有找到为什么会发生这种情况。
顺便说一下,我在铁路上3.0.4
并且正在加注0.9.0.rc9
答案 1 :(得分:0)
不知道这是否会解决您的问题,但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
答案 2 :(得分:0)