簡體   English   中英

如何與Rspec鏈接allow_any_instance_of

[英]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_fileYAML的類方法,而不是實例方法,因此可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM