对Rails+RSpec中的String对象使用have_selector



我正在为lib/目录中的一个文件编写规范。我在那里的一个方法返回了一个HTML字符串,但随后我尝试了如下操作:

expect(subject).to have_selector("p:eq(1)") do |first_p|

它给了我以下错误:

Failure/Error: expect(subject).to have_selector("p:eq(1)") do |first_p|
NoMethodError:
  undefined method `has_selector?' for #<String:0x007f93798a8338>

我该如何解决这个问题?我应该用另一个特定的对象包装字符串对象吗?我试过使用Nokogiri::HTML.fragment(),但都没有成功。我想我应该用一些webrat的物体或类似的东西包裹它,但我不知道如何到达那里。提前谢谢。

假设您使用Capybara来获取has_selector?方法,则需要将结果封装在Capybara.string(...)中以访问has_selector?方法。

所以你的测试应该从:

expect(subject).to have_selector("p:eq(1)")

收件人:

result = Capybara.string(subject)
expect(result).to have_selector("p:eq(1)")

文件:http://rdoc.info/gems/capybara/Capybara#string-class_method

我对使用我在本线程早期发现的type: :view解决方案感到不太满意,尽管它是一个非常有效的解决方案。问题是,我对lib/目录中文件的规范实际上不应该被视为视图规范。

所以我在互联网上做了一些进一步的研究,找到了一个对我来说似乎更好的方法

所以考虑一下这个线程中的原始示例。您应该在描述块中添加以下行:

include Webrat::Matchers

最后一个例子是:

describe MyApp::UI::MyDecoratorClass do
  include Webrat::Matchers
  # ...
end

相关内容

  • 没有找到相关文章

最新更新