Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Turbolinks 5使用水豚进行特性测试_Ruby On Rails_Capybara_Turbolinks_Poltergeist_Turbolinks 5 - Fatal编程技术网

Ruby on rails Turbolinks 5使用水豚进行特性测试

Ruby on rails Turbolinks 5使用水豚进行特性测试,ruby-on-rails,capybara,turbolinks,poltergeist,turbolinks-5,Ruby On Rails,Capybara,Turbolinks,Poltergeist,Turbolinks 5,您如何配置水豚以使用Turbolinks 5? 我已经在测试中配置了poltergeist和js:true RSpec.feature "Home", type: :feature, js: true do describe "on home" do given!(:user) { create :user } background{ visit root_path } scenario "can select user" do first('.hea

您如何配置水豚以使用Turbolinks 5? 我已经在测试中配置了poltergeist和
js:true

RSpec.feature "Home", type: :feature, js: true do
  describe "on home" do
    given!(:user) { create :user }

    background{ visit root_path }

    scenario "can select user" do
      first('.header h2', user.first_name).click
      sleep 1
      expect(page).to have_content user.email
    end
  end
end

我之所以能够让它起作用,唯一的原因是使用了睡眠1,你没有描述没有睡眠什么是不起作用的,但我假设是期望失败了。TurboLink不需要特定的配置,只需要确保您使用的是支持JS的驱动程序(您似乎已经这样做了)

您看到这种行为的最常见原因是您的
Capybara.default\u max\u wait\u time
设置太低,因此have\u content matcher没有足够长的时间重试。尝试将其增加1秒(如果未将其设置为任何其他值,则默认为2秒)

第二种可能性是您没有禁用事务测试,而是尝试在多个线程之间共享数据库连接,并且处于死锁状态

此外,如果您实际上不需要使用
first
,您应该更喜欢
find
-
#first
#所有
都有一些限制(默认情况下不等待,返回的元素不可重新加载),这些限制可能导致测试中出现片状,这使得他们的使用不受欢迎,除非在绝对需要的地方,并且你完全理解页面上发生了什么。如果将查找范围限定到页面中只有一个结果的部分,而不是首先使用
,您几乎总是会做得更好。除此之外,您对
first
的使用实际上并没有使用传递给它的第二个参数,因为它需要作为
:text
选项传递

find('.header h2', text: user.first_name).click   #first takes the same parameters if you REALLY need first

如果我使用
单击user.first\u name
,则此操作不需要
睡眠
。我知道,但是如果我使用
查找(…)。单击
@Spike886“不起作用”是什么意思?它什么都不起作用?这会引起错误吗?(如果是,什么错误)
单击与
单击链接或按钮相同,这可能是因为单击的是实际的链接或按钮,而您最初的示例只是单击
h2
我并不等待页面加载,所以,在turbolinks将其放置到链接页面之前,它会在当前页面上运行期望值one@Spike886Capybara不保证在任何操作上等待页面加载,这就是为什么匹配器(如have_content)将等待/重试到Capybara.default_max_wait_time seconds。如果您将该值增加到10秒左右,但期望值仍然失败(我假设这是您得到的错误,因为您还没有实际说过),那么可能是因为它没有实际单击触发重新加载的内容,或者是因为您正在共享一个DB连接而出现死锁(您也没有对此做出响应)-或者您使用的是poltergeist不支持的ES6/7功能