我正在为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