我在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>
链接似乎工作正常)和CSS断言时,它发生在本地比如assert_has(link("Sign Out")
。如果我从上下文传递会话而不是将两者汇总在一起似乎没问题。但是,它仍然在CI服务器(Travis)上失败。
这听起来像上面描述的问题(“在我们的测试套件中经常出现一个操作被执行的错误,一个进入另一个页面而不等待操作完成,创建竞争条件”),但它失败或成功,而不是片状,所以我想知道是否有一些我不知道的东西。
如果您想查看实际代码,那么PR就会失败:https://github.com/solid-af/cheese_log/pull/18
我还应该提一下(在本地测试时)看起来像是在超时后失败的断言应该是成功的。如果我在RegistrationPage.register_with
中删除了显式的会话返回,则失败的行是RegistrationPage.assert_registered()
。我已打开screenshot_on_failure
。其中的屏幕截图显示填写的表单,但未提交,而上面的手册take_screenshot()
行显示带有“已成功注册”文本的主页。超级怪异!
|> RegistrationPage.register_with(@valid_attrs)
|> take_screenshot()
|> RegistrationPage.assert_registered()
编辑:虽然我在本地遇到的问题似乎与我在CI上遇到的问题无关。正如下面所指出的,这可能会导致连接以某种方式保持登录状态。
答案 0 :(得分:0)
问题不在于您的预期。断言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
屏幕截图显示仍有“Sign Out”
可见:
答案 1 :(得分:-1)
我在测试环境中遇到同样的问题。将其添加到数据库配置
下的config / test.exs文件中ownership_timeout: 60_000
这应该可以解决问题。您得到的错误是因为默认情况下设置的时间是15000.因此,如果任何进程花费的时间超过Db会引发错误。