在我将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">
为什么会这样?
答案 0 :(得分:4)
根据https://github.com/jnicklas/capybara/pull/1169,这是因为最近的变化:
因为to_s得到,所以不可能与nil匹配 呼吁你传递给你的东西。
解决方法是改为做这样的事情:
expect(find_field("foo_field_id").text).to be_blank