我在学习rspec stub如何工作方面遇到了一些麻烦。
我必须测试以下帮助方法,我希望将输出字符串测试为html:
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]执行存根以输出要使用的collect方法的Hash。
我已经使用
进行了测试{{1}}
但到目前为止没有成功。我应该怎么做模拟所以“YAML.load_file(”config / admin_links.yml“)[资源]”返回“{”仪表板“=>”admin_dashboard_path“,”Configurações“=>”“”所以方法collect可以处理变量吗?
TNX,
答案 0 :(得分:1)
load_file
是YAML
的类方法,而非实例方法,因此您可以使用allow(YAML).to receive(:load_file).and_return(hash_link)
将其存根。
答案 1 :(得分:0)
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)