我正在运行验收测试,包括通过/ users / sign_in登录。
我如何设置测试,以便可以在Rspec Capybara测试中“单击”提交按钮?
似乎Devise禁用了Login提交按钮并运行javascript以使事情正常进行。
<%= f.submit "Log in" %>
产生:
<input type="submit" name="commit" value="Log In" tabindex="4" data-disable-with="Log In" />
需要设计的数据禁用功能似乎打破了水豚测试。我只想按下面的接受测试按钮。
it "logs in and shows success message" do
visit '/users/sign_in'
login_as(user, :scope => :user)
within(".login-details") do
fill_in 'Email', with: user.email
fill_in 'Password', with: 'fakepassword'
end
click_button 'Log in'
expect(page).to have_content 'Success'
end
正在生产:
Capybara::ElementNotFound: Unable to find button "Log in" that is not disabled
注意:我有多个页面可以登录,可以将用户发送到该页面,此示例是显示此错误的最简单的测试。因此,如果您想知道“为什么他们需要这个?”,我的目标不是不要“确保设计可行”。
data-disable-with
属性由Rails UJS用于在单击按钮后更改按钮文本,因此不会影响此测试。查看您发布的HTML元素,按钮的value
是“登录”,因此,由于大小写的关系,您需要执行此操作
click_button 'Log In'
而不是“登录”
[我确实想知道为什么您在填写用户名和密码的同一代码中有login_as(user, :scope => :user)
,当您想绕过实际填写表单并登录时,通常只使用login_as
。