Wallaby验收测试中的Postgres连接超时

时间:2017-12-15 01:47:47

标签: postgresql elixir phoenix-framework wallaby.js

我在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上遇到的问题无关。正如下面所指出的,这可能会导致连接以某种方式保持登录状态。

2 个答案:

答案 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”可见:

Screenshot after click_sign_out

答案 1 :(得分:-1)

我在测试环境中遇到同样的问题。将其添加到数据库配置

下的config / test.exs文件中
ownership_timeout: 60_000

这应该可以解决问题。您得到的错误是因为默认情况下设置的时间是15000.因此,如果任何进程花费的时间超过Db会引发错误。