Может кто-нибудь описать мне, что RSpec 2 делает в этом? - PullRequest
0 голосов
/ 03 сентября 2010

Я пытался погрузиться в RSpec 2, но его автоматически сгенерированные спецификации контроллера не работают ни для одной версии RSpec 2 с любой версией Ruby или любой версией Rails.Может быть, я упускаю что-то очевидное?

def mock_category(stubs={})
  @mock_category ||= mock_model(Category, stubs).as_null_object
end

describe "GET show" do
  it "assigns the requested category as @category" do
    Category.stub(:find).with("37") { mock_category }
    get :show, :id => "37"
    assigns(:category).should be(mock_category)
  end
end

Это автоматически генерируется из rails g scaffold Category

RSpec возвращает это:

Failures:
   1) CategoriesController GET show assigns the requested category as @category
    Failure/Error: assigns(:category).should be(mock_category)
    expected Category_1002, got nil
    # ./spec/controllers/categories_controller_spec.rb:21
    # /Library/Ruby/Gems/1.8/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:239:in `inject'

Почему этот макет / заглушкавозвращение nil?

Обновление

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

def show
   @category = Category.find(params[:id])

  respond_to do |format|
    format.html # show.html.erb
    format.xml  { render :xml => @category }
  end
end

Спасибо!

Ответы [ 2 ]

0 голосов
/ 04 сентября 2010

RSpec имеет некоторые серьезные конфликты между бета-версией Rails3, бета-версией RSpec 2 до выпуска Rails3 и бета-версией RSpec 2.

Я попытался скопировать и вставить различия между эшафотами, но я полностью очистил расположение, удалив все спецификации и восстановив их. Удаление haml и установка только haml-rails для рельсов 3.

Все спецификации запускаются сейчас.

0 голосов
/ 03 сентября 2010

Хм. Ну, если что-то не так, я точно не вижу этого. Может быть, действие show вообще не достигается? Есть ли какие-либо before_filter заявления, мешающие?

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

controller.should_receive(:show)

btw .as_null_object говорит макету игнорировать сообщения, которые вы не заглушаете. Это помогает с объектами, которые зависят от проверок или других ограничений, которые иначе пришлось бы заглушить, чтобы получить объект, который можно протестировать. Но будьте осторожны, чтобы не игнорировать сообщения, которые вы должны проверять.

...