直接在模型上调用rspec导致存根中的错误!方法

khe*_*lll 4 ruby rspec ruby-on-rails

运行时:

rake spec:models
Run Code Online (Sandbox Code Playgroud)

一切都运作良好,但当我这样做

rspec spec/models/spot_spec.rb
Run Code Online (Sandbox Code Playgroud)

Spot.stub! :test1,我得到:

undefined method `stub!' for Spot:Class
Run Code Online (Sandbox Code Playgroud)

只有当我包含该存根时才会发生错误!线.

任何想法如何避免它?我想仅为特定模型运行规范.

更新:

使用Ruby 1.9.2和RSpec 2.4.0,这里是spot_spec.rb代码:

require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')

describe Spot do
  before(:all) do
    Spot.stub! :test1
    @spot = Spot.new
  end

  subject {@spot}

  describe "validations" do
    it { should validate_presence_of(:user) }
  end
end
Run Code Online (Sandbox Code Playgroud)

和spec_helper.rb:

ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

RSpec.configure do |config|
  config.mock_with :rspec
end
Run Code Online (Sandbox Code Playgroud)

khe*_*lll 14

原来是一个问题,before(:all)电话:

那是对的.模拟被隐式验证并在(:每个)之后被清除,因此它们将不会在之前(:all)工作.

改变它来before(:each)解决它.

感谢大家.