多次致电RSpec和Capybara

时间:2011-10-14 07:28:12

标签: 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运行时才会出现错误。这是配置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

3 个答案:

答案 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)