【问题标题】:Request spec with Devise + Rspec2 + Spork/Guard使用 Devise + Rspec2 + Spork/Guard 请求规格
【发布时间】:2013-03-01 12:31:13
【问题描述】:

我已经设置了 Rspec2 + Spork + Guard + Devise

我的文件如下

#spec_helper.rb
Spork.prefork do
  #code
  Dir[Rails.root.join('spec/support/**/*.rb')].each {|f| require f}
  RSpec.configure do |config|
    config.extend ControllerMacros, :type => :controller 
  end 
end

Spork.each_run do
  # This code will be run each time you run your specs.
  FactoryGirl.reload
  include ControllerMacros
end

#spec/support/controller_macros.rb
module ControllerMacros
    def login_user
      before(:each) do
        @request.env["devise.mapping"] = Devise.mapping[:user]
        user = FactoryGirl.create(:user)
        sign_in user
      end
    end
end

#spec/support/devise.rb
Spec.configure do |config|
    config.include Devise::TestHelpers, :type => :controller
end

在我的请求规范中

#spec/features/documents_spec.rb
require 'spec_helper'

describe "Documents" do

  login_user

  describe "GET /documents" do
    it "should display document name as sameera CV" do
      #spec code
    end
  end
end

当我运行 bundle exec guard 时,我得到了

  1) Documents GET /documents should display document name as sameera CV
     Failure/Error: Unable to find matching line from backtrace
     NoMethodError:
       undefined method `env' for nil:NilClass
     # ./spec/support/controller_macros.rb:4:in `block in login_user'

到目前为止,我已经通过谷歌做了很多修复,但似乎没有任何效果,有人可以帮助我:)

我来了

  • 导轨 3.2.9
  • rspec 2.12.0
  • 设计 2.2.3

任何帮助将不胜感激

【问题讨论】:

    标签: ruby-on-rails-3 integration-testing rspec2 guard spork


    【解决方案1】:

    尝试在spec/support/controller_macros.rb 中将@request.env["devise.mapping"] = Devise.mapping[:user] 更改为request.env["devise.mapping"] = Devise.mapping[:user]

    【讨论】:

    • 感谢您的回复,它没有用,当我更改它时,它显示未定义的局部变量或方法 `request' for #<:core::examplegroup::nested_1::nested_2:0x007ffae03aaab0>
    【解决方案2】:

    在这里,我正在回答我自己的问题,并且我能够为我提出的问题找到解决方法。

    以下是我做的步骤

    1) 从支持目录中删除了 controller_macros.rbdevise.rb

    2) 从spec_helper.rb 中删除了ControllerMacros 引用

    3) 将以下代码添加到

    #spec/features/documents_spec.rb
    before(:each) do
       user = FactoryGirl.create(:user)
       visit root_path
       fill_in 'user_email', :with => user.email
       fill_in 'user_password', :with => user.password
       click_button 'Sign in'
    end
    

    我确信应该有一种更优雅的方式(如设计 wiki 中所述),但这很有效 :)

    【讨论】:

      猜你喜欢
      • 2011-12-11
      • 1970-01-01
      • 2012-12-24
      • 2012-08-07
      • 1970-01-01
      • 2013-01-13
      • 2012-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多