首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Rspec链接allow_any_instance_of

如何使用Rspec链接allow_any_instance_of
EN

Stack Overflow用户
提问于 2015-05-18 01:38:24
回答 2查看 1.1K关注 0票数 1

在学习rspec存根是如何工作的时候,我遇到了一点麻烦。

我必须测试下面的辅助方法,我希望将输出字符串测试为html:

代码语言:javascript
复制
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方法输出一个哈希值。

我已经测试过了

代码语言:javascript
复制
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,

EN

回答 2

Stack Overflow用户

发布于 2015-05-18 01:54:22

load_fileYAML的类方法,而不是实例方法,所以您可以用allow(YAML).to receive(:load_file).and_return(hash_link)将其存根。

票数 1
EN

Stack Overflow用户

发布于 2015-05-18 06:07:46

Rspec通常会教你如何使用分区方法来简化存根。在这种情况下,提取YAML文件的读数,您就可以非常简单地将结果存根。

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30289950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档