capybara has_field与nil rspec期望在升级到2.2时失败

时间:2014-05-27 14:25:03

标签: ruby-on-rails rspec capybara

在我将Capybara从2.1.0升级到2.2.1并将Poltergeist从1.4.1升级到1.5.0之后,以下rspec期望在我的rails应用程序的测试中失败了:

it{ expect(page).to have_field("foo_field_id", with: nil) }

rspec错误如下所示:

 Failure/Error: it{ expect(page).to have_field("foo_field_id", with: nil) }
 Capybara::ExpectationNotMet:
   expected to find field "foo_field_id" but there were no matches. Also found "", which matched the selector but not all filters.

如果我在检查中抛出一个断点,那么该值实际上是nil:

»  page.find_field('foo_field_id').value
=> nil

如果我改变"用" to" text&#34 ;,断言通过:

it{ expect(page).to have_field("foo_field_id", text: nil) }

HTML表单字段如下所示:

<input class="string optional" id="foo_field_id" name="foo[field_id]" type="text">

为什么会这样?

1 个答案:

答案 0 :(得分:4)

根据https://github.com/jnicklas/capybara/pull/1169,这是因为最近的变化:

  

因为to_s得到,所以不可能与nil匹配   呼吁你传递给你的东西。

解决方法是改为做这样的事情:

expect(find_field("foo_field_id").text).to be_blank