我正在使用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',但在测试重定向时,我该怎么做?
另外,我的测试方式是对吗?
感谢。
答案 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
变量。