2
我SO沖刷和旁若無人的結果似乎爲我工作:基於關閉我的規格一ControllerHelper
方法什麼建議制定設計Rspec的未定義的方法`ENV」的零:NilClass
:
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方法RSpecs的每一位:
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)>'
正如其他職位建議,我在我的rails_helper.rb
文件中包括Devise::TestHelpers
。我也包括我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
才能成功登錄。
...但我因爲這個錯誤阻止了我,所以甚至沒有那麼遠。
控制器測試不通過實際要求運行,如果你想訪問'request'對象(無'@'),那麼你定義使這些請求規格。 – Anthony
@Anthony對不起,剛接觸測試我不太關注。那麼,我該如何去測試我所有受保護的控制器方法?我在'application_controller.rb'中設計了'before_action:authenticate_user!',這讓我相信我需要模仿一個登錄用戶。 – Godzilla74
另外,如果我從我的測試中取出'login_existing_user',我會重定向到我的登錄頁面。 – Godzilla74