[英]How to chain allow_any_instance_of with Rspec
我在學習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”)[資源]“返回“ {” Dashboard“ =>” admin_dashboard_path“,”Configurações“ =>”“”因此該方法收集可以工作的變量?
TNX,
load_file
是YAML
的類方法,而不是實例方法,因此可以使用allow(YAML).to receive(:load_file).and_return(hash_link)
。
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.