2015-10-06 108 views
0

我正在做我的註冊頁面的測試,但我得到這個錯誤,說它找不到該字段。我使用的輸入ID在FILL_IN方法水豚:: ElementNotFound:無法找到字段「user_email」

<%= form_for @user, url: {action: "create"},html: {class: "horizontal-form", id: "signup-form"} do |f| %> 
    <div class="form-group"> 
      <%= f.email_field :email, placeholder: "Email", class: "form-control" %> 
      <%= f.text_field :username, placeholder: "Username", class: "form-control" %> 
      <%= f.password_field :password, placeholder: "Password", class: "form-control" %> 
      <%= f.password_field :password_confirmation, placeholder: "Password Confirmation", class: "form-control" %> 
      <%= f.submit "Sign Up", class: "btn" %> 
    </div> 
<% end %> 

測試

require 'rails_helper' 

RSpec.describe UsersController, type: :controller do 
    describe "GET Sign-Up" do 
     it "returns http success" do 
      visit '/signup' 
      get :new 
      expect(response).to have_http_status(:success) 
     end 
    end 

    describe "Post User" do 
     it "creates user" do 
      user_params = FactoryGirl.attributes_for(:user) 

      fill_in "user_email", with: "user_params[:email]" 
      fill_in "user_username", with: user_params[:username] 
      fill_in "user_password", with: user_params[:password_digest] 
      fill_in "user_password_confirmation", with: user_params[:password_digest] 
      click_button "Sign Up" 

      expect { 
       post :create, user: user_params 
      }.to change(User, :count).by(1) 
      expect(current_path).to redirect_to(root_path) 
     end 
    end 
end 

,但我不斷收到此錯誤

1) UsersController GET Sign-Up returns http success 
Failure/Error: fill_in "user_email", with: "user_params[:email]" 
Capybara::ElementNotFound: 
    Unable to find field "user_email" 

回答

1

你在下面幾行做的是不是真的一個控制器規格。

fill_in "user_email", with: "user_params[:email]" 
fill_in "user_username", with: user_params[:username] 
fill_in "user_password", with: user_params[:password_digest] 
fill_in "user_password_confirmation", with: user_params[:password_digest] 
click_button "Sign Up" 

它更像是一個功能規範,因爲您使用的是模擬瀏覽器中用戶行爲的水豚。目前您正在混合功能和控制器規格,因此當您移除測試上方的那些行時應該可以正常工作。

對於控制器規格,您直接向您正在測試的控制器發送請求和參數,因爲它們僅用於測試控制器本身,而不是與視圖交互。

你可以閱讀更多關於RSpec的文檔中的差異:我猜你需要點擊頁面上的鏈接或按鈕之前的形式變得可見

https://www.relishapp.com/rspec/rspec-rails/docs/controller-specs https://www.relishapp.com/rspec/rspec-rails/docs/feature-specs/feature-spec

+0

我添加了'visit'/ signup'',但仍然是相同的錯誤 – eustass

+0

你可以刪除fill_in和click_button行嗎?他們不需要進行測試。 –

1

,但可如果沒有看到更多的頁面,確認沒有 - 如果不是這種情況,那麼顯示生成的html而不是erb,這樣我們就可以看到它們在瀏覽器中出現的字段名稱。這就是說,你的測試不會按照你編寫它們的方式正常工作,因爲你正在混合功能測試和控制器測試 - 你不能使用capybara方法來填充瀏覽器中的字段,也可以使用get ,帖子等在相同的測試中。在使用水豚時,你需要做的是用戶要做的動作,然後驗證來自這些動作的屏幕變化。

+0

謝謝你提供的信息,我剛開始測試,所以我還沒有那麼好......再次感謝 – eustass

相關問題