Rails Rspec警告:“此动态方法已弃用。”

3

我的Rails 4/Ruby 2应用程序每次RSpec测试创建一个FactoryGirl对象时都会抛出以下警告:"DEPRECATION WARNING: This dynamic method is deprecated. Please use e.g. Post.find_or_create_by(name: 'foo') instead."

当我在开发模式下运行我的应用程序时,不会出现此警告。是FactoryGirl的代码引起了这个问题吗?我试图找到一些信息,但似乎其他人没有遇到这个问题。


你正在使用哪个版本的FactoryGirl? - jvperrin
2个回答

1
如果您告诉Rails为deprecation警告提供完整的堆栈跟踪,那么您应该可以很容易地诊断它。这些警告来自一个名为ActiveSupport :: Deprecation的库 - 告诉它以debug模式运行。
# config/environments/test.rb
ActiveSupport::Deprecation.debug = true

对我来说,这些警告是由于Stringex库的旧版本引起的。
FactoryGirl会创建一个新模型,触发其中一个Stringex方法的调用,这将引发警告,尽管在我打开完整堆栈跟踪之前无法看到。 bundle update stringex 没有问题地解决了这个问题。

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

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


不,弃用警告并未被消除。所指的动态方法是什么? - Joe Gatt
弃用是指一种方法,形式为Post.find_or_create_by_name('foo'),在Rails 4中已不再使用,而FactoryGirl似乎在某个地方调用了它。您的Gemfile中是否使用了factory_girl_rails,或者只使用了factory_girl - jvperrin
在使用 Rolify 3.2.0 时,我遇到了以下警告: role.class.find_or_create_by_name_and_resource_type_and_resource_id(role_name, resource_type, resource_id) - ballPointPenguin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接