1

我在一个演示应用程序中发现了这一点:

  it "should be able to use bip_text to update a text field" do
    @user.save!
    visit user_path(@user)
    within("#email") do
      page.should have_content("lucianapoli@gmail.com")
    end

    bip_text @user, :email, "new@email.com"

    visit user_path(@user)
    within("#email") do
      page.should have_content("new@email.com")
    end
  end

https://github.com/dougc84/best_in_place/blob/master/spec/integration/js_spec.rb

似乎很容易。

所以我把它复制到我的 Capybara 规范中:

  before (:each) do
    @report = FactoryGirl.create(:report)
    visit report_path(@report)
  end 
  it "name", :focus do
    within("#name") do
      page.should have_content @report.name 
    end 
    bip_text @report, :name, "new name"
    visit report_path(@report)
    within("#name") do
      page.should have_content "new name"
    end 
  end 

它太快了,我几乎看不到任何东西,但看起来它确实对#name 字段做了一些事情。然后页面重新加载,它仍然是旧值。

有什么帮助吗?

哦顺便说一句,它确实在浏览器中工作。就是无法通过测试。

4

2 回答 2

0

我在助手sleep 1之前和之后添加了它,它起作用了。bip_

于 2013-11-09T15:10:20.120 回答
0

这里的问题是运行的 Javascriptbip_text是异步的,但是在您的下一行中,您会立即转到另一个页面,从而切断该 Javascript 的完成。这就是你sleep 1修复它的原因。您也可以通过让 Capybara 在之前等待一些新内容来修复它visit report_path,但随后您需要向页面写入成功消息之类的内容(例如,使用ajax:successJS 回调)。

于 2014-01-24T04:56:29.380 回答