我已经搜索过了,没有其他人的结果似乎对我有用:
我根据Devise的建议,为我的规范提供ControllerHelper
方法:
def login_existing_user
@request.env["devise.mapping"] = Devise.mappings[:user]
user = FactoryGirl.create(:user)
company = FactoryGirl.create(:company)
user.company_id = company.id
sign_in user
end
我还在此方法中创建了Company
,因为用户可以通过注册过程的第2步获取经过身份验证的首页。
此时,我只想尝试使用ScansControllerSpec
登录用户:
RSpec.describe ScansController, type: :controller do
before(:all) do
login_existing_user
@device = build(:device)
end
describe "GET #create" do
it "returns http success" do
get :create, :device_id => @device.id
puts response
# expect(response).to have_http_status(:success)
end
end
....
end
但是我的每一个CRUD方法RSpec都得到了这个:
1) ScansController GET #create returns http success
Failure/Error: @request.env["devise.mapping"] = Devise.mappings[:user]
NoMethodError:
undefined method `env' for nil:NilClass
# ./spec/support/controller_helpers.rb:15:in `login_existing_user'
# ./spec/controllers/scans_controller_spec.rb:6:in `block (2 levels) in <top (required)>'
正如其他帖子所建议的那样,我将Devise::TestHelpers
包含在我的rails_helper.rb
文件中。我还包括了我的ControllerHelpers
:
RSpec.configure do |config|
config.include Devise::TestHelpers, type: :controller
config.include Warden::Test::Helpers
Warden.test_mode!
config.infer_spec_type_from_file_location!
config.include ControllerHelpers, type: :controller
config.after do
Warden.test_reset!
end
end
最后,我需要能够记录用户以测试受保护的控制器方法是否有效。我不确定这是否是关联问题,因此我要添加一个用户必须拥有company
,并且公司必须拥有subscription
才能成功登录。
......但是我甚至无法做到这一点,因为这个错误阻碍了我。