2017-02-21 84 views
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才能成功登錄。

...但我因爲這個錯誤阻止了我,所以甚至沒有那麼遠。

+0

控制器測試不通過實際要求運行,如果你想訪問'request'對象(無'@'),那麼你定義使這些請求規格。 – Anthony

+0

@Anthony對不起,剛接觸測試我不太關注。那麼,我該如何去測試我所有受保護的控制器方法?我在'application_controller.rb'中設計了'before_action:authenticate_user!',這讓我相信我需要模仿一個登錄用戶。 – Godzilla74

+0

另外,如果我從我的測試中取出'login_existing_user',我會重定向到我的登錄頁面。 – Godzilla74

回答

相關問題