Как проверить, что переменные экземпляра модели назначаются в спецификациях RSpec Controller - PullRequest
1 голос
/ 13 декабря 2010

Я новичок в RSpec, но я пытаюсь создать спецификации контроллера RSpec2 для некоторых новых функций в приложении Rails 3. У меня есть модель владение_to: user, и я хочу убедиться, что мой контроллер настраивает пользователя при создании нового экземпляра моей модели.

Зарегистрированный в данный момент пользователь должен быть пользователем, назначенным модели в действии создания. У меня проблемы с получением моих спецификаций для работы. Вот что у меня есть

# this was generated by rspec-rails and sets up my mock model
def mock_plan_order(stubs={})
  (@mock_plan_order ||= mock_model(PlanOrder).as_null_object).tap do |plan_order|
    plan_order.stub(stubs) unless stubs.empty?
  end
end

# here's the actual test that's not working
context "user logged in" do
    before(:each) do
      login_user # this logs in and sets @current_user - this is working
    end

    describe "POST create" do
        # the spec that is not working
        it "sets the user id to the logged on user" do
          PlanOrder.stub(:new).with({"days_per_week" => 3, "description"=>"Test", "purpose_id"=>1 }) { mock_plan_order(:save => true) }
          post :create, :plan_order =>{"days_per_week" => 3, "description"=>"Test", "purpose_id"=>1 }
          assigns(:plan_order).user.should equal(@current_user)
        end
   end
end

Вот выход спецификации

1) PlanOrdersController user logged in POST create with valid params sets the user id to the logged on user
 Failure/Error: assigns(:plan_order).user.should equal(@current_user)

 expected #<User:58754688> => #<User:0x3808680 @name="User_1">
      got #<PlanOrder:58689360> => #<PlanOrder:0x37f8750 @name="PlanOrder_1010">

Кто-нибудь знает, что я делаю не так?

1 Ответ

2 голосов
/ 13 декабря 2010

Вы заблокировали создание объекта plan_order, поэтому пользователь не будет установлен. Либо не издевайтесь / заглушки, добавьте насмешку, чтобы убедиться, что пользователь настраивается.

...