Rails Rspec警告:“这种动态方法已被弃用。”

时间:2013-11-29 19:06:16

标签: ruby-on-rails factory-bot

每次我的RSpec测试创建FactoryGirl对象时,我的Rails 4 / Ruby 2应用程序都会抛出以下警告:“DEPRECATION WARNING:不推荐使用此动态方法。请使用例如Post.find_or_create_by(名称:'foo')代替。 “

在开发中运行应用程序时,不会抛出此警告。 FactoryGirl的代码是抛出这个吗?我试图找到一些信息,但看起来并不像其他人那样。

2 个答案:

答案 0 :(得分:1)

如果您告诉Rails为弃用警告提供完整的堆栈跟踪,您应该能够非常轻松地进行诊断。警告来自名为ActiveSupport::Deprecation的库 - 告诉它以调试模式运行。

# config/environments/test.rb
ActiveSupport::Deprecation.debug = true

对我来说,警告是由Stringex库的旧版本引起的。

FactoryGirl将创建一个新模型,它会触发一个Stringex方法的调用,这会引发警告,尽管在我打开完整的堆栈跟踪之前无法看到它。 bundle update stringex毫无问题地解决了这个问题。

答案 1 :(得分:0)

看起来它来自ActiveRecord

module DeprecationWarning
  def body
    "#{deprecation_warning}\n#{super}"
  end

  def deprecation_warning
    %{ActiveSupport::Deprecation.warn("This dynamic method is deprecated. Please use e.g. #{deprecation_alternative} instead.")}
  end
end

我不确定你为什么不在开发中收到警告。您的环境是否会抑制警告?