0

我有以下系统测试(Rails 后端、React/Redux 前端单页应用程序):

test "can sign up user properly" do
    visit '/'
    within ('.signup-form-box') do
       fill_in 'Username', with:'userp'
       fill_in "Email Address", with: "t!"
       fill_in "Password", with: "12345679"
       click_on "Sign Up"
    end
    assert page.current_path ==  '/books'
end

它应该在成功注册后将用户引导到“/books”页面。然而这个测试失败了。当我将断言更改为:

 assert page.current_path ==  '/'

它通过了。检查这类事情的正确方法是什么?

4

1 回答 1

0

click_on不能保证等待由它触发的任何动作,因为 Capybara 无法知道将触发什么(如果有)动作。特别是出于这个原因,Capybara 在其查找器、匹配器和断言中内置了等待行为,以允许页面赶上测试。在这种情况下,您对 Capybara 返回的事物使用通用断言,而不是 Capybara 提供的匹配器。而不是assert page.current_path == '/books'你应该使用

assert_current_path '/books'

这将继续检查路径一段时间以查看是否/何时更改。如果这不能解决您的问题,则意味着您的登录/注册失败,通过查看页面(html 或屏幕截图)应该很明显可以确认。

注意:我会假设您的测试应该失败,因为t!作为电子邮件地址输入应该无法通过验证。

于 2018-05-24T21:52:07.853 回答