【发布时间】:2014-07-21 14:05:17
【问题描述】:
我仅在使用 RSpec 的测试环境中遇到此错误。该代码适用于所有其他环境,包括 Rails 控制台。
鉴于此代码
class User < ActiveRecord::Base
scope :flag, -> {where(flag: nil) }
end
当我打电话给User.where(expired_at: nil).flag时
然后结果是undefined methodflagfor []:Array
我正在使用 Rails 4.1.1 和 rspec-rails 2.14.0。
【问题讨论】:
-
你的
User.where方法被覆盖了吗? -
不,我没有覆盖 User.where 方法。
-
当然
User类继承ActiveRecord::Base之后? -
好吧,这很奇怪。
User.method(:where).source_location返回什么? -
/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rspec-mocks-2.14.6/lib/rspec/mocks/method_double.rb 这对我有帮助很多东西要找到答案:在我的 RSpec 示例中,我执行 User.stub(:where).and_return([])。
标签: ruby-on-rails activerecord rspec rspec2 ruby-on-rails-4.1