RSpec中的存根yaml文件

时间:2018-09-27 11:22:09

标签: ruby rspec

我想通过加载位于不同目录中的样机yaml文件来对这种方法进行存根处理。

存根的原始配置:

  def load_environment_config(gateway, trx_type)
    @config = YAML.load_file("config/#{env}.yml")["#{env.upcase}"]
    raise "\n\nMissing gateway configuration for #{gateway} in file config/#{env}.yml!\n" unless @config[gateway]
    @terminal = terminal_for(@config, gateway, trx_type)
    @url = URI.parse("#{@config['processing_url']}#{@terminal['token']}")
  end

我尝试过:

let(:yaml_file)           { YAML::load(File.read(File.join('spec', 'fixtures', 'yaml', 'test_env.yml'))) }
let(:config)              { yaml_file['TEST_ENV'] }

allow(request_builder).to receive(:config).with(config) 

错误:

 Errno::ENOENT:
       No such file or directory @ rb_sysopen - config/test_env.yml
     # ./models/request_builder.rb:50:in `load_environment_config'

对文件存根的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

您正试图在方法的第一行中显式加载文件。您可以将test_env.yaml首先放在config目录中。

您还可以存根YAML#load_file

let(:yaml) { YAML.load(File.read(....) }

allow(YAML).to \
  receive(load_file).
  with("config/#{env}.yml")).
  and_return(yaml)