我尝试使用capybara来模拟登录以测试我的登录表单,但无法找到电子邮件或密码字段。
我已检查页面来源以确认我使用了正确的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]"。我尝试过使用"会话[email]" (和等于密码)fill_in但没有运气。
错误我得到了:
Failure/Error: fill_in 'email', :with => user.email
Capybara::ElementNotFound:
Unable to find field "email"
任何帮助都将不胜感激。
答案 0 :(得分:1)
Capybara不用于控制器测试。 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
这将非常快速,无需渲染视图。
答案 1 :(得分:0)
所以我找到了答案。我没有意识到Rspec在运行控制器测试时没有呈现视图(因为它希望单独测试视图)。为了使控制器测试呈现视图,您只需要在其中一个describe-do块中添加 renders_view
(但不要在it-do块中添加)。
似乎我的测试现在正在运行。
不是评论中讨论的合适答案。