水豚无法找到具有正确 ID 的表单域
Capybara unable to find form field with correct ID
我正在尝试使用水豚模拟登录来测试我的登录表单,但是它找不到电子邮件或密码字段。
我已经检查了页面源以确认我使用的是正确的 ID,我也尝试过使用字段名称。
这是我当前的测试:
it "returns http success" do
user = FactoryGirl.create(:user)
visit sessions_new_path
fill_in 'email', :with => user.email
fill_in 'password', :with => user.password
click_button('submit')
expect(response).to have_http_status(:success)
end
我的表格:
= form_for(:session, url: login_path, :html => {class: 'login_form'}) do |f|
.field
= f.email_field :email, 'data-msg-required' => t('email_required'), :placeholder => t('.form_email'), id: 'email'
.field
= f.password_field :password, 'data-msg-required' => t('password_required'), :placeholder => t('.form_pwd'), id: 'password'
= f.submit t('.form_sbmt'), class: 'btn-submit'
查看页面源代码时,ID 列为电子邮件和密码(针对相应字段),名称遵循 "session[email]" 格式。我已经尝试使用 "sessions[email]"(和密码等值)作为 fill_in,但没有成功。
我遇到的错误:
Failure/Error: fill_in 'email', :with => user.email
Capybara::ElementNotFound:
Unable to find field "email"
如有任何帮助,我们将不胜感激。
所以我找到了答案。我没有意识到 Rspec 在 运行 控制器测试时不会呈现视图(因为它希望单独测试视图)。为了让控制器测试呈现视图,您只需要在您的 describe-do 块之一中添加 renders_view
(但不在 it-do 块中)。
看来我的测试正在运行。
评论中讨论的并不是一个合适的答案。
控制器测试中未使用水豚。 Capybara 用于对您的应用程序进行端到端测试(功能测试),并不仅限于测试控制器。您的操作的控制器测试应该类似于
it "returns http success" do
user = FactoryGirl.create(:user)
post :create, session: { email: user.email, password: user.password}
expect(response).to have_http_status(:success)
end
这将非常快并且不需要渲染视图。
我正在尝试使用水豚模拟登录来测试我的登录表单,但是它找不到电子邮件或密码字段。
我已经检查了页面源以确认我使用的是正确的 ID,我也尝试过使用字段名称。
这是我当前的测试:
it "returns http success" do
user = FactoryGirl.create(:user)
visit sessions_new_path
fill_in 'email', :with => user.email
fill_in 'password', :with => user.password
click_button('submit')
expect(response).to have_http_status(:success)
end
我的表格:
= form_for(:session, url: login_path, :html => {class: 'login_form'}) do |f|
.field
= f.email_field :email, 'data-msg-required' => t('email_required'), :placeholder => t('.form_email'), id: 'email'
.field
= f.password_field :password, 'data-msg-required' => t('password_required'), :placeholder => t('.form_pwd'), id: 'password'
= f.submit t('.form_sbmt'), class: 'btn-submit'
查看页面源代码时,ID 列为电子邮件和密码(针对相应字段),名称遵循 "session[email]" 格式。我已经尝试使用 "sessions[email]"(和密码等值)作为 fill_in,但没有成功。
我遇到的错误:
Failure/Error: fill_in 'email', :with => user.email
Capybara::ElementNotFound:
Unable to find field "email"
如有任何帮助,我们将不胜感激。
所以我找到了答案。我没有意识到 Rspec 在 运行 控制器测试时不会呈现视图(因为它希望单独测试视图)。为了让控制器测试呈现视图,您只需要在您的 describe-do 块之一中添加 renders_view
(但不在 it-do 块中)。
看来我的测试正在运行。
评论中讨论的并不是一个合适的答案。
控制器测试中未使用水豚。 Capybara 用于对您的应用程序进行端到端测试(功能测试),并不仅限于测试控制器。您的操作的控制器测试应该类似于
it "returns http success" do
user = FactoryGirl.create(:user)
post :create, session: { email: user.email, password: user.password}
expect(response).to have_http_status(:success)
end
这将非常快并且不需要渲染视图。