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



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 下失败?

我的猜测是"测试"在您的配置文件中未设置/正确。作为额外的好处,当从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)在此之后,所有其他事情应该正常工作。

engine.rb 不需要 gem。

这就是为什么Model 没有AWS_CONFIG,而 Rails 控制台有。

请参阅此答案,了解如何在引擎中加载宝石。

最新更新