Ruby on rails 水豚不在等待

Ruby on rails 水豚不在等待,ruby-on-rails,rspec,capybara,Ruby On Rails,Rspec,Capybara,我有一个页面,其中有一个链接,可以打开一个带有简单输入字段的引导模式。我很难理解为什么水豚不等待模态打开,并立即失败 我添加了expect(第页)。以包含内容(“Did you”),因此水豚将等待几秒钟,直到显示模式。 但由于某些原因,它没有等待,并引发了Capybara::ExpectationNotMet:期望在中找到文本“Doyou”…“ 如果我睡眠1秒,它就会找到模态,但这还不够好,因为在我的spec\u helper.rb中找到的DB clean回调被调用: config.after(

我有一个页面,其中有一个链接,可以打开一个带有简单输入字段的引导模式。我很难理解为什么水豚不等待模态打开,并立即失败

我添加了
expect(第页)。以包含内容(“Did you”)
,因此水豚将等待几秒钟,直到显示模式。 但由于某些原因,它没有等待,并引发了
Capybara::ExpectationNotMet:期望在中找到文本“Doyou”…“

如果我睡眠1秒,它就会找到模态,但这还不够好,因为在我的spec\u helper.rb中找到的DB clean回调被调用:

config.after(:each) do
  DatabaseCleaner.clean
end
这是规范:

RSpec.describe "follower button", type: :request do
  it "sends email #15B to owner", :js do
    using_wait_time 20 do
      FactoryGirl.create(:apartment_with_event)

      visit apartment_path(Apartment.last)
      click_on 'follow-events'
      expect(page).to have_content('Did you')
      within('#follow-events-modal') do
        fill_in 'follower-email-signup-mail', with: 'follower@example.com'
        click_button 'follower-signup-submit'
      end

      expect(page).to have_content(I18n.t("followers.create.title_success"))
      expect(Follower.all.count).to eq(1)
    end
  end
end
我还在spec\u helper.rb中设置了
Capybara.default\u max\u wait\u time=10
,即使在本例中它应该等待20秒

忘了提一下,我正在使用水豚wekbit作为驱动程序

我真的花了好几个小时试图找出它发生的原因,而其他的例子运行得很好

更新: 添加故障的完整回溯

Failures:

  1) leeron's button sends email #15B to owner
     Failure/Error: raise ActionController::RoutingError, "No route matches [#{env['REQUEST_METHOD']}] #{env['PATH_INFO'].inspect}"

     ActionController::RoutingError:
       No route matches [GET] "/images/slider/missing.png"
     # /Users/etaiso/.rbenv/versions/2.2.3/gemsets/dorbel/gems/rollbar-1.2.13/lib/rollbar/middleware/rails/show_exceptions.rb:22:in `call_with_rollbar'
     # /Users/etaiso/.rbenv/versions/2.2.3/gemsets/dorbel/gems/railties-4.2.4/lib/rails/rack/logger.rb:38:in `call_app'
     # /Users/etaiso/.rbenv/versions/2.2.3/gemsets/dorbel/gems/railties-4.2.4/lib/rails/rack/logger.rb:20:in `block in call'
     # /Users/etaiso/.rbenv/versions/2.2.3/gemsets/dorbel/gems/railties-4.2.4/lib/rails/rack/logger.rb:20:in `call'
     # /Users/etaiso/.rbenv/versions/2.2.3/gemsets/dorbel/gems/request_store-1.2.0/lib/request_store/middleware.rb:8:in `call'
     # /Users/etaiso/.rbenv/versions/2.2.3/gemsets/dorbel/gems/rack-1.6.4/lib/rack/methodoverride.rb:22:in `call'
     # /Users/etaiso/.rbenv/versions/2.2.3/gemsets/dorbel/gems/rack-1.6.4/lib/rack/runtime.rb:18:in `call'
     # /Users/etaiso/.rbenv/versions/2.2.3/gemsets/dorbel/gems/rack-1.6.4/lib/rack/lock.rb:17:in `call'
     # /Users/etaiso/.rbenv/versions/2.2.3/gemsets/dorbel/gems/rack-1.6.4/lib/rack/sendfile.rb:113:in `call'
     # /Users/etaiso/.rbenv/versions/2.2.3/gemsets/dorbel/gems/railties-4.2.4/lib/rails/engine.rb:518:in `call'
     # /Users/etaiso/.rbenv/versions/2.2.3/gemsets/dorbel/gems/railties-4.2.4/lib/rails/application.rb:165:in `call'
     # /Users/etaiso/.rbenv/versions/2.2.3/gemsets/dorbel/gems/rack-1.6.4/lib/rack/urlmap.rb:66:in `block in call'
     # /Users/etaiso/.rbenv/versions/2.2.3/gemsets/dorbel/gems/rack-1.6.4/lib/rack/urlmap.rb:50:in `each'
     # /Users/etaiso/.rbenv/versions/2.2.3/gemsets/dorbel/gems/rack-1.6.4/lib/rack/urlmap.rb:50:in `call'
     # /Users/etaiso/.rbenv/versions/2.2.3/gemsets/dorbel/gems/capybara-2.7.1/lib/capybara/server.rb:43:in `call'
     # /Users/etaiso/.rbenv/versions/2.2.3/gemsets/dorbel/gems/rack-1.6.4/lib/rack/handler/webrick.rb:88:in `service'
     # ------------------
     # --- Caused by: ---
     # Capybara::ExpectationNotMet:
     #   expected to find text "Did you" in "...(REMOVED BY ME TO SAVE SPACE)..."
     #   /Users/etaiso/.rbenv/versions/2.2.3/gemsets/dorbel/gems/capybara-2.7.1/lib/capybara/node/matchers.rb:527:in `block in assert_text'

Finished in 3.87 seconds (files took 9.79 seconds to load)
1 example, 1 failure

从回调中,我们可以看到实际的异常是来自应用程序的路由错误。当Capybara重试/等待查找程序和期望时,它会检查服务器抛出的错误,如果
Capybara.raise_server_errors
为真,它将在测试线程中引发这些错误,以便测试可以看到它们。重新引发f测试线程中应用程序线程的异常是测试线程中的任何当前异常(如ExpectationNotMet)ruby将其设置为apps异常的嵌套
原因
。这不是真正的原因,但我们不能,因为Capybara会重新引发服务器错误,它显示在那里。您可以设置
Capybara.raise\u server\u errors=false
,或者更好的是,修复丢失的image、

从回调中,我们可以看到实际的异常是来自应用程序的路由错误。当Capybara正在重试/等待查找程序和期望时,它会检查服务器抛出的错误,如果
Capybara.raise\u server\u errors
为真,它将在测试线程中引发这些错误,以便测试可以看到它们。Rerai的一个副作用是测试线程中来自应用程序线程的异常是测试线程中的任何当前异常(如ExpectationNotMet)ruby将其设置为apps异常的嵌套
原因
。这不是真正的原因,但我们不能,因为Capybara会重新引发服务器错误,它显示在那里。您可以设置
Capybara.raise\u server\u errors=false
,或者更好的是,修复丢失的image、

您使用哪种水豚驱动程序:Webkit、Poltergeist等等?首先,在spec\u helper中,您的DB clean回调应该在
后添加
append\u-请参见-回调运行的顺序非常重要,您希望最后调用DB clean。其次-在完整的错误消息中是否有更多详细信息e获取?当你说它没有等待时,你的意思是它只是立即失败,没有20秒的等待然后失败吗?如果是这样,请检查你的配置,以确保测试实际上是使用capybara webkit运行的visit@itsnikolay我正在使用webkit。@TomWalpole是的,它会立即失败,我已经编辑了源代码最后发布完整回溯。此外,驱动程序确实是webkit。哦——你的应用程序引发了一个服务器异常,导致文本匹配重试提前退出——要么修复丢失的图像文件异常,要么关闭
Capybara。引发\u服务器\u错误
——你最好修复你的异常,想想你是哪一个Capybara驱动程序使用:Webkit、Poltergeist等等?首先,spec_helper中的DB clean回调应该在
之后添加
append_-请参见-回调的运行顺序非常重要,您希望最后调用DB clean。第二-您收到的完整错误消息中还有更多详细信息吗?当您说它不是w时等待,你的意思是它立即失败,没有20秒的等待,然后失败吗?如果是这样,请检查您的配置,以确保测试实际上正在使用capybara webkit运行
将capybara.current_驱动程序放在visit@itsnikolay我正在使用webkit。@TomWalpole是的,它会立即失败,我已经用完整的回溯编辑了原始帖子。此外,驱动程序确实是webkit。哦——你的应用程序引发了一个服务器异常,导致文本匹配重试提前退出——要么修复丢失的图像文件异常,要么关闭
Capybara。引发服务器错误
——你最好修复你的异常though@etaiso在下一次水豚释放中会比ks Tom!我知道服务器错误,但不知道原因是什么,因为水豚“--由:--“误导我。你的PR为+1:)@etaiso将在下次水豚发布中更清楚地说明这一点谢谢Tom!我知道服务器错误,但不知道原因是什么,因为水豚“--由以下原因引起:---“误导我。和+1表示您的公关!:)