ruby - Ruby 中的存根文件
问题描述
我有这个 ruby 方法,我想在 rspec 文件中存根:
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(:request_builder) { described_class.new(env: nil) }
let(:trx_types) { ['davivienda'] }
let(:trx_type) { 'davivienda' }
let(:gateway) { 'girogate' }
let(:currency) { 'USD' }
let(:base_params) { request_builder.send(:base_params) }
before(:each) { allow(request_builder).to receive(:currency).and_return(currency) }
let(:yaml_file) { YAML::load(File.read(File.join('spec', 'fixtures', 'yaml', 'test_env.yml'))) }
let(:config) { yaml_file['TEST_ENV'] }
let(:successful_response_file) { File.read(File.join('spec', 'fixtures', 'xml', 'successful_response.xml')) }
allow(request_builder).to receive(:currency).and_return('EUR')
allow(request_builder).to receive(:env).and_return('TEST_ENV')
allow(request_builder).to receive(:config).and_return(config)
allow(request_builder).to receive(:base_params).and_return(base_params)
allow(request_builder).to receive(:gateway).and_return(gateway)
allow(request_builder).to receive(:request_builder)
但是当我运行 rspec 代码时,我得到了这个:
Errno::ENOENT:
No such file or directory @ rb_sysopen - config/TEST_ENV.yml
# ./models/request_builder.rb:50:in `load_environment_config'
# ./models/request_builder.rb:45:in `filter_trx_types_list_for'
# ./models/request_performer.rb:8:in `process_trx'
# ./models/request_builders/girogate_request_builder.rb:81:in `block in submit!'
# ./models/request_builders/girogate_request_builder.rb:80:in `each'
# ./models/request_builders/girogate_request_builder.rb:80:in `submit!'
# ./spec/models/request_builders/girogate_request_builder_spec.rb:42:in `block (3 levels) in <top (required)>'
我的想法是存根变量配置并使用位于 spec 目录中的 yaml 文件。什么是覆盖的正确方法@config
?
解决方案
也许您可以使用 rails 方法来获取正确的环境,例如:
file_path = File.join(Rails.root, 'config', "#{Rails.env}.yml"
@config = YAML.load_file(filepath)["#{Rails.env.upcase}"]
因此,您至少需要三个新文件:
{root}/config/test.yml
{root}/config/development.yml
{root}/config/production.yml
有了这个,你不应该需要存根文件加载过程
推荐阅读
- python - 我该如何解决这个错误,它说列表索引超出范围?
- node.js - nodejs.TypeError:下一个不是函数
- reactjs - 在reactjs中登录到个人资料页面后数据不刷新
- javascript - isAuthenticated 使用 Javascript express 和护照总是假的
- flutter - 目前有什么方法可以使多行文本字段的提示居中?
- java - 面板上的滚动窗格不允许滚动按钮
- dns - 我购买了一个域名。但它加载了奇怪的页面
- javascript - 当我们将焦点放在它上面时如何触发工具提示
- notifications - 堆叠多个 p 消息
- sql - 如何将 SQL 查询转换为 noSQL 查询(MongoDB)?