2013-02-28 53 views
1

我已经安装Rspec2 +叉勺+卫士+设计要求规格与设计+ Rspec2 +叉勺/卫队

我的文件是在我的要求的规格如下

#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

任何帮助,将不胜感激

回答

1

尝试瓒ging @request.env["devise.mapping"] = Devise.mapping[:user]request.env["devise.mapping"] = Devise.mapping[:user]spec/support/controller_macros.rb

+0

感谢您的答复,它没有工作,当我改变它,它说未定义局部变量或方法'请求'为# sameera207 2013-02-28 20:05:17

0

在这里,我回答了我自己的问题,并且我找到了解决问题的方法。

以下是我做

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

2)取出ControllerMacros引用从spec_helper.rb

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 

我敢肯定,应该有一个更优雅的方式(如d在设计维基),但这工作:)