使用CircleCI和Minitest进行前端测试:测试不会等待足够长的时间来加载页面

时间:2017-05-01 22:19:49

标签: capybara integration-testing minitest acceptance-testing circleci

因此,我的测试似乎在75%的时间内通过。另外25%的失败是因为测试套件没有等待足够长的时间让页面完全加载。在我们的本地机器上,测试大约需要35秒,但在CircleCI的日志中它只有5秒。 (在本地我用fatal error: unexpected signal during runtime execution [signal SIGSEGV: segmentation violation code=0x1 addr=0x70 pc=0x7fbb03e5d193] runtime stack: runtime.throw(0xa4a0a4, 0x2a) /usr/local/go/src/runtime/panic.go:596 +0x95 runtime.sigpanic() /usr/local/go/src/runtime/signal_unix.go:274 +0x2db goroutine 5230 [syscall, locked to thread]: runtime.cgocall(0x921850, 0xc421667348, 0xa495f1) /usr/local/go/src/runtime/cgocall.go:131 +0xe2 fp=0xc421667308 sp=0xc4216672c8 gopkg.in/rana/ora%2ev4._Cfunc_OCIAttrGet(0x2c92f08, 0x35, 0xc421cb8be4, 0xc421cb8be8, 0x5, 0x2b81930, 0xc400000000) gopkg.in/rana/ora.v4/_obj/_cgo_gotypes.go:347 +0x4d fp=0xc421667348 sp=0xc421667308 gopkg.in/rana/ora%2ev4.(*Rset).paramAttr.func1(0x2c92f08, 0xc400000035, 0xc421cb8be4, 0xc421cb8be8, 0x5, 0x2b81930, 0xf1ef01) /go/src/gopkg.in/rana/ora.v4/rset.go:970 +0xfc fp=0xc421667390 sp=0xc421667348 gopkg.in/rana/ora%2ev4.(*Rset).paramAttr(0xc4211f22d0, 0x2c92f08, 0xc421cb8be4, 0xc421cb8be8, 0xc400000005, 0x0, 0x0) /go/src/gopkg.in/rana/ora.v4/rset.go:976 +0x88 fp=0xc4216673e0 sp=0xc421667390 gopkg.in/rana/ora%2ev4.(*Rset).open(0xc4211f22d0, 0xc421358000, 0x7fbae405ed28, 0x0, 0x0) /go/src/gopkg.in/rana/ora.v4/rset.go:554 +0xd43 fp=0xc421667b98 sp=0xc4216673e0 gopkg.in/rana/ora%2ev4.(*Stmt).qryC(0xc421358000, 0xf1e940, 0xc421ace900, 0xc421cb8ad0, 0x1, 0x1, 0xc4211f22d0, 0x0, 0x0) /go/src/gopkg.in/rana/ora.v4/stmt.go:442 +0x3e0 fp=0xc421667f18 sp=0xc421667b98 gopkg.in/rana/ora%2ev4.(*DrvStmt).QueryContext.func1(0xc421b73260, 0xc420e789e8, 0xc420e789e0, 0xf1e940, 0xc421ace900, 0xc421cb8ad0, 0x1, 0x1) /go/src/gopkg.in/rana/ora.v4/drvStmt_go1_8.go:76 +0xa6 fp=0xc421667fa0 sp=0xc421667f18 runtime.goexit() /usr/local/go/src/runtime/asm_amd64.s:2197 +0x1 fp=0xc421667fa8 sp=0xc421667fa0 created by gopkg.in/rana/ora%2ev4.(*DrvStmt).QueryContext /go/src/gopkg.in/rana/ora.v4/drvStmt_go1_8.go:82 +0x30c 运行测试)

我是这个技术堆栈的新手,所以任何帮助都非常感谢,即使它只是适当的参考文档。

BROWSER=chrome m path/to/test.file

1 个答案:

答案 0 :(得分:1)

您编写断言的方式并不是利用Capybara的等待/重试行为,因此在较慢的硬件上运行(与本地盒子相比,CircleCI)会导致测试失败。 assert_equal评估两个参数比较它们,并完成它。这并不好,因为Capybara假设每个操作都可以执行异步操作,因此它不必等待按钮点击提交并加载新页面(因为它无法知道按钮单击可能采取的操作生产)。但是,如果您使用Capybara提供的断言,它将等待/重试比较至Capybara.default_max_wait_time秒,以使比较成立。我不确定您的find_qa方法是如何定义的,但如果您已宣布自定义:qa选择器,则可以执行类似

的操作
assert_selector :qa, 'price', text: '24'

如果find_qa只是做一个CSS选择器那么你可以做

assert_selector :css, "whatever find_qa('price') produces as a css selector", text: '24'

或者你可以做到

find_qa('price').assert_text('24')

由于您正在使用minitest,您可能希望阅读 - https://github.com/teamcapybara/capybara#using-capybara-with-minitest - 并配置Capybara的最小匹配器,以便运行断言的计数是正确的,并提供一堆更具体的断言,将利用Capybara的等待/重试行为。有关添加的匹配器,请参阅https://github.com/teamcapybara/capybara/blob/master/lib/capybara/minitest.rb,这样您就可以编写

之类的内容
assert_text find_qa('price'), '24'
assert_xpath 'an XPath selector', ...
assert_title ...
assert_current_path ...

相关问题