我已经设置了Rspec2 + Spork +警卫器+设计
我的文件如下
#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'到目前为止,我已经通过谷歌做了很多修复工作,似乎没有什么能奏效,有人能帮我吗?)
我上了
任何帮助都将不胜感激。
发布于 2013-02-28 19:52:42
尝试将@request.env["devise.mapping"] = Devise.mapping[:user]更改为spec/support/controller_macros.rb中的request.env["devise.mapping"] = Devise.mapping[:user]
发布于 2013-03-01 04:31:13
在这里,我回答了我自己的问题,我找到了一个解决我提出的问题的办法。
以下是我所做的步骤
1)从支持目录中删除controller_macros.rb和devise.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我确信应该有一种更优雅的方法(如describe中所描述的),但这是可行的:)
https://stackoverflow.com/questions/15144315
复制相似问题