rspec mocking "неопределенный метод" stub_model "для #(NoMethodError)» - PullRequest
0 голосов
/ 22 сентября 2011

Я использую Rails 3.1, и я хотел добавить некоторые заглушки и макеты в мои спецификации, но я получил NoMethodError:

undefined method `stub_model' for #<Class:0x007ff9c339bd80> (NoMethodError)

Вот выдержка из моего GemFile:

gem 'rspec'
gem 'rspec-rails'

Я запустил пакетную установку и rails g rspec: install

А вот код, который пытается создать stub_model

  0     @flight = stub_model(Flight)
  1     Flight.stub! (:all).and_return([@flight])

А вот spec_helper.rb:

  0 # This file is copied to spec/ when you run 'rails generate rspec:install'
  1 ENV["RAILS_ENV"] ||= 'test'
  2 require File.expand_path("../../config/environment", __FILE__)
  3 require 'rspec/rails'
  4 
  5 # Requires supporting ruby files with custom matchers and macros, etc,
  6 # in spec/support/ and its subdirectories.
  7 Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
  8   
  9 RSpec.configure do |config|
 10   # == Mock Framework
 11   #
 12   # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
 13   #
 14   # config.mock_with :mocha
 15   # config.mock_with :flexmock
 16   # config.mock_with :rr
 17   config.mock_with :rspec
 18 
 19   # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
 20   config.fixture_path = "#{::Rails.root}/spec/fixtures"
 21     
 22   # If you're not using ActiveRecord, or you'd prefer not to run each of your
 23   # examples within a transaction, remove the following line or assign false
 24   # instead of true.
 25   config.use_transactional_fixtures = true
 26 end 

Я звоню "rspec ./spec" и "bundle exec rspec ./spec" (пробовал оба, без разницы)

Все, что я делаю, похоже на учебник (на самом деле, я следую The Rails 3 Way).

Что мне не хватает?

Ответы [ 2 ]

2 голосов
/ 15 марта 2012

Скорее всего, ваш исходный код запускался вне примера спецификации.Это даст ошибку, которую вы описываете:

class Foo; end
describe Foo do
  @foo = stub_model(Foo)
  Foo.stub!(:all).and_return([@foo])
end

, но это будет работать:

class Foo; end
describe Foo do
  before do
    @foo = stub_model(Foo)
    Foo.stub!(:all).and_return([@foo])
  end
end
0 голосов
/ 22 сентября 2011

См. Комментарий в оригинальном вопросе.Похоже, что у меня на шее дурной сучок, и это сработало.

...