我在Wallaby测试中遇到了Postgres超时的几个问题。我得到的错误是:
[error] Postgrex.Protocol (#PID<0.349.0>) disconnected: ** (DBConnection.ConnectionError) owner #PID<0.566.0> timed out because it owned the connection for longer than 15000ms
当我尝试链接一个click(button("Submit"))
事件时,它发生在本地(我认为我所遇到的所有问题都是表单提交,<a>
链接似乎工作得很好)和cazxswpoi这样的CSS断言。如果我从上下文传递会话而不是将两者汇总在一起似乎没问题。但是,它仍然在CI服务器(Travis)上失败。
这听起来像上面描述的问题(“我们的测试套件经常出现执行操作的错误,一个进入另一个页面而不等待操作完成,创建竞争条件”),但它失败或成功一直而不是片状所以我想知道是否有一些我不知道的东西。
如果您想看到实际的代码,那么这是失败的PR:assert_has(link("Sign Out")
我还应该提一下(在本地测试时),看起来超时后失败的断言应该是成功的。如果我在https://github.com/solid-af/cheese_log/pull/18中删除了显式的会话返回,那么失败的行是RegistrationPage.register_with
。我打开了RegistrationPage.assert_registered()
。该截图显示填写的表单,但未提交,而上面的手册screenshot_on_failure
行显示带有“已成功注册”文本的主页。超级怪异!
take_screenshot()
编辑:虽然我在本地遇到的问题似乎与我在CI上遇到的问题无关。正如下面所指出的那样,这可能会导致连接以某种方式保持登录状态。
问题不在于您的预期。断言|> RegistrationPage.register_with(@valid_attrs)
|> take_screenshot()
|> RegistrationPage.assert_registered()
成功。您有退出问题,随后对RegistrationPage.assert_registered()
的调用失败。基本上,您的测试将永远保持登录状态。
我修改了Page.click_sign_in()
中的代码以访问主页,然后截取屏幕截图:
sign_in_test.exs
屏幕截图显示仍有 test "user can sign in", %{session: session} do
session
|> Page.visit_home_page()
|> Page.click_sign_in()
|> SignInPage.click_register_link()
|> RegistrationPage.register_with(@valid_attrs)
|> RegistrationPage.assert_registered()
|> Page.click_sign_out()
|> Page.visit_home_page()
|> take_screenshot() # HERE
|> Page.click_sign_in()
|> SignInPage.sign_in_with(@valid_attrs)
|> SignInPage.assert_signed_in()
end
可见:
我在测试环境中遇到了同样的问题。在数据库配置下的config / test.exs文件中添加它
“Sign Out”
这应该可以解决问题。您得到的错误是因为默认情况下设置的时间是15000.因此,如果任何进程花费的时间超过Db会引发错误。