我在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的对象或类似的东西包装它,但我不知道如何到达那里。提前谢谢。
答案 0 :(得分:1)
假设您使用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
答案 1 :(得分:1)
我对使用我之前在此主题中发现的type: :view
解决方案感到不满意,尽管它是一个非常有效的解决方案。问题是我的lib/
目录中的文件规范实际上不应被视为视图规范。
所以我在互联网上做了一些进一步的研究,发现了一个对我来说更好的方法。
所以考虑一下这个帖子中的原始例子。您只需在describe块中添加以下行:
include Webrat::Matchers
所以最后的例子如下:
describe MyApp::UI::MyDecoratorClass do
include Webrat::Matchers
# ...
end