如何在RSpec中运行规范时获取赋值?

时间:2012-11-07 15:14:09

标签: ruby-on-rails rspec factory-bot rspec-rails

我正在使用FriendlyId gem,并在保存记录时生成slug。它很棒。

我可以像places/house-of-dead一样路由到slu ..但是在测试方面我遇到了问题。

我正在使用FactoryGirl来存储我要创建的参数,但是如果我的路由重定向到它,我不知道如何让生成的slug断言,我的测试在下面, (???? should be the generated slug):

    context '#create' do
      it 'should redirect to place after created' do
        place = FactoryGirl.attributes_for(:place)

        post :create, { place: FactoryGirl.attributes_for(:place) }

        response.should redirect_to places_path(slug: ????)
      end
    end

我的控制器很简单:

def create
    @place = Place.new(params[:place])

    # setting up who owns this place
    @place.user = current_user

    if @place.save
      flash[:success] = "Place created."

      redirect_to @place
    else
      render :new
    end
end

正如您所看到的,我使用redirect_to @place并将其重定向到`place /:slug',但在测试重定向时,我该怎么做?

另外,我的测试方式是对吗?

感谢。

1 个答案:

答案 0 :(得分:2)

你几乎回答了自己:

response.should redirect_to places_path(assigns(:place))

或者如果你需要使用slug:

response.should redirect_to places_path(slug: assigns(:place).slug)

有关assigns()的更多信息,请参阅https://github.com/rspec/rspec-rails#assigns

这一行

place = FactoryGirl.attributes_for(:place)

是多余的,因为您在测试的其余部分中从不使用place变量。