Проблема издевательства над огурцом + рельсы - PullRequest
1 голос
/ 19 марта 2010

У меня много проблем с попыткой определить макет для моделей рельсов на огурце. Похоже, что метод создает кучу ожиданий сообщений, и я продолжаю получать ошибки, подобные этим:

 Given I have only a product named "Sushi de Pato" # features/step_definitions/product_
steps.rb:19
      unexpected invocation: #<Mock:ProductCategory_1001>.__mock_proxy()
      unsatisfied expectations:
      - expected exactly once, not yet invoked: #<Mock:ProductCategory_1001>.errors(any_pa
rameters)
      - expected exactly once, not yet invoked: #<Mock:ProductCategory_1001>.id(any_parame
ters)
      - expected exactly once, not yet invoked: #<Mock:ProductCategory_1001>.to_param(any_
parameters)
      - expected exactly once, not yet invoked: #<Mock:ProductCategory_1001>.new_record?(a
ny_parameters)
      - expected exactly once, not yet invoked: #<Mock:ProductCategory_1001>.destroyed?(an
y_parameters)
      satisfied expectations:
      - allowed any number of times, not yet invoked: #<Mock:errors>.count(any_parameters)

       (Mocha::ExpectationError)

Я еще не реализовал класс ProductCategory, и я просто хочу, чтобы он возвращал идентификатор и атрибут 'name'.

Это мое определение шага:

Given /^I have only a product named "([^\"]*)"$/ do |name|
  @product = Product.create!(:name => name, :description => 'Foo', :price => 100, :points => 100, :category => mock_model(ProductCategory))
end

А это мой файл env.rb:

$: << File.join(File.dirname(__FILE__),"..")

require 'spec\spec_helper

Я использую RSPec 1.3.0, огурец 0.6.3 и webrat 0.7.0

Я тоже пытался использовать заглушки, но вместо этого получил некоторые другие ошибки ...

Ответы [ 3 ]

1 голос
/ 15 октября 2010

В моем случае это было потому, что я активировал другую фальшивую структуру и забыл об этом. Я исправил это, снова прокомментировав строку в spec / spec_helper.rb:

  # == Mock Framework
  #
  # RSpec uses its own mocking framework by default. If you prefer to
  # use mocha, flexmock or RR, uncomment the appropriate line:
  #
  # config.mock_with :mocha
  # config.mock_with :flexmock
  # config.mock_with :rr

Таким образом, RSpec будет использовать свою собственную среду для имитации

1 голос
/ 20 марта 2010

Не рекомендуется издеваться над моделями в огурцах. Предполагается, что Cucumber представляет собой полноценный стек для тестирования вне системы.

Если вы еще не реализовали класс ProductCategory, я бы порекомендовал удалить связь категорий из Product и просто протестировать реализованную вами функциональность.

Когда вы приступите к реализации ProductCategory, вы можете протестировать ее через.

0 голосов
/ 20 марта 2010

Я думаю, что Джраллисон ответил на вопрос, но в любом случае, если вам хочется высмеивать модели с огурцом для реализации поведения для таких вещей, как внешние соединения или манипуляции с датой / временем, вы можете использовать следующий ответ, который я получил от такого же программиста в cukes список обсуждений:

Вот что я делаю в env.rb: требует "spec / mocks"

Before do
 # To get RSpec stubs and mocks working.
 $rspec_mocks ||= Spec::Mocks::Space.new
end

After do
   begin
     $rspec_mocks.verify_all
   ensure
     $rspec_mocks.reset_all
   end
end

Удачи!

...