为什么RSpec失败,未定义的方法[] Nil :: NilClass for AWS_CONFIG ['bucket']

时间:2016-06-08 22:28:10

标签: ruby-on-rails rspec rails-engines

config / initializers / aws_config.rb:

AWS_CONFIG = YAML.load_file("#{::Rails.root}/config/aws.yml")[Rails.env]

模型有代码:

self.bucket = AWS_CONFIG["bucket"]

测试结果:

 Failure/Error: self.bucket = AWS_CONFIG['bucket']
 NoMethodError:
   undefined method `[]' for nil:NilClass

运行代码的开发或生产没有问题,为什么aws_config初始化程序在RSpec下失败?

2 个答案:

答案 0 :(得分:0)

我的猜测是你的配置文件中没有设置/正确'test'。 作为额外的好处,当从config / *。yml加载配置文件时,Rails提供了一个辅助方法来获取配置。 假设您已经适当地嵌套了您的配置,您应该能够#{your app name here(find it in config/application.rb)}::Application.config_for(:aws),如果您已正确设置,您应该只能获取值,而不需要查看环境。

看一下这个例子

production:
  secret_key: 000894jnjfbdfu39
  secret_id: 123456
  bucket: shadow

development:
  secret_key: 000894jnjfbdfu39
  secret_id: 123456
  bucket: shadow

test:
  secret_key: 000894jnjfbdfu39
  secret_id: 123456
  bucket: meadow

在您的应用程序初始化程序中,您可以拥有:

AWS_CONFIG = YourApp::Application.config_for(:aws) 在此之后所有其他事情都应该正常工作。

答案 1 :(得分:0)

engine.rb不需要宝石。

这就是为什么model没有AWS_CONFIG,而rails console没有。

请参阅this answer,了解如何在引擎中加载宝石。