1

我正在使用FriendlyIdgem,它会在保存记录时生成一个 slug。它工作得很好。

我可以像这样路由到蛞蝓:places/house-of-dead,完美。但是我在测试时遇到了问题。

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',但是在测试该重定向时,我该怎么做呢?

另外,我的测试方式是否正确/良好?

谢谢。

4

1 回答 1

2

你几乎回答自己:

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

或者如果您需要使用 slug:

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

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

而这条线

place = FactoryGirl.attributes_for(:place)

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

于 2012-11-07T15:26:25.610 回答