加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 模拟文件输入作为Rspec上的文件路径

发布时间:2020-12-17 02:33:36 所属栏目:百科 来源:网络整理
导读:我有一个关于如何使用rspec模拟文件输入的问题.我有一个类的以下代码,但不完全知道模拟文件输入的原因. filepath是/ path / to / the / file 我在Google上进行了搜索,结果通常是加载实际文件而不是模拟,但我实际上看起来相反,只有模拟,但不使用实际文件. mod
我有一个关于如何使用rspec模拟文件输入的问题.我有一个类的以下代码,但不完全知道模拟文件输入的原因. filepath是/ path / to / the / file

我在Google上进行了搜索,结果通常是加载实际文件而不是模拟,但我实际上看起来相反,只有模拟,但不使用实际文件.

module Service
  class Signing
    def initialize(filepath)
      @config = YAML.load_file(filepath)
      raise "Missing config file." if @config.nil?
    end

    def sign()      …
    end

    private
    def which()     …
    end

  end 
end

是否可以使用EOF分隔符进行此文件输入模拟?

file =  <<EOF
A_NAME: ABC
A_ALIAS: my_alias
EOF

解决方法

您可以存根YAML.load_file并从文本中返回已解析的YAML,如下所示:

yaml_text = <<-EOF
  A_NAME: ABC
  A_ALIAS: my_alias
EOF
yaml = YAML.load(yaml_text)
filepath = "bogus_filename.yml"
YAML.stub(:load_file).with(filepath).and_return(yaml)

这并没有完全隐藏文件加载本身,但为了做到这一点,你必须假设YAML.load_file在幕后做了什么,这不是一个好主意.由于可以安全地假设已经测试了YAML实现,因此您可以使用上面的代码将整个调用替换为从文本解析的夹具.

如果要测试将正确的文件名传递给load_file,请将stub替换为期望值:

YAML.should_receive(:load_file).with(filepath).and_return(yaml)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读