вызов rspec напрямую для модели приводит к ошибкам в заглушке!метод - PullRequest
4 голосов
/ 29 января 2011

При работе:

rake spec:models

все работает хорошо, но когда я делаю

rspec spec/models/spot_spec.rb

с Spot.stub! :test1, я получаю:

undefined method `stub!' for Spot:Class

Ошибка возникает только тогда, когда я включаю этот заглушки линия.

Есть идеи, как этого избежать? Я хочу запустить спецификации только для конкретной модели.

Обновление:

Используя 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

И 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

Ответы [ 2 ]

14 голосов
/ 29 января 2011

Оказалось, что проблема в before(:all) вызов:

Это правильно.Мок неявно проверяется и очищается после (: каждого), поэтому они не будут работать раньше (: все).

Изменение на before(:each) решило это.

Спасибовсе.

1 голос
/ 29 января 2011

Сделайте так, чтобы spot_spec.rb включал spec_helper.rb, а затем убедитесь, что spec_helper.rb включает spot_spec.rb.

Если вы используете ruby ​​1.9+, вы можете использовать require_relative для включения spot_spec.rb в spec_helper.rb

Обновление:

в spec_helper.rb add:

require_relative '../app/models/spot'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...