在学习rspec存根是如何工作的时候,我遇到了一点麻烦。
我必须测试下面的辅助方法,我希望将输出字符串测试为html:
def build_links(resource)
YAML.load_file("config/admin_links.yml")[resource].collect do |link|
active = (eval(link.last) == request.path) ? "active" : ""
path = link.last.empty? ? "#" : eval(link.last)
content_tag(:li, link_to(link.first, path), class: active)
end.join.html_safe我想测试该方法是否以正确的方式构建链接。我不知道如何为YAML.load_file("config/admin_links.yml")resource做存根,以便为collect方法输出一个哈希值。
我已经测试过了
hash_link = {"Dashboard"=>"admin_dashboard_path", "Configurações"=>""}
allow_any_instance_of(YAML).to receive(:load_file).with(["test"]).and_return(hash_link)
u = YAML
allow(u).to receive_message_chain(:load_file, :[] ,:collect)但到目前为止还没有成功。我应该如何做这个模拟,以便"YAML.load_file("config/admin_links.yml")resource“返回"{"Dashboard"=>"admin_dashboard_path",”Configura“=>”“,这样方法collect就可以在变量上工作?
tnx,
发布于 2015-05-18 01:54:22
load_file是YAML的类方法,而不是实例方法,所以您可以用allow(YAML).to receive(:load_file).and_return(hash_link)将其存根。
发布于 2015-05-18 06:07:46
Rspec通常会教你如何使用分区方法来简化存根。在这种情况下,提取YAML文件的读数,您就可以非常简单地将结果存根。
class MyClass
def self.admin_links
YAML.load_file("config/admin_links.yml")
end
def build_links(resource)
self.class.admin_links[resource].collect do |link|
# ...
end
end
end
allow(MyClass).to receive_message(:admin_links).and_return(hash_link)https://stackoverflow.com/questions/30289950
复制相似问题