0

ネストされたautolinks_controllerのRspecテストを作成しようとしています。ただし、作成アクション後のリダイレクトが壊れています。自動リンクを正常に作成した後、特定のWebサイト(したがって、website_autolink_path)内のその自動リンクにリダイレクトしたいと思います。私のコントローラーの仕様は次のようになります。

describe "POST create when params[:website_id] are present" do
  before(:each) do
    @website = create(:website)
    @autolink = attributes_for(:website_autolink, website_id: @website.id)
  end

  context "with valid attributes and params[:website_id] are present" do
        it "saved the autolink in the database" do
            expect{
                post :create, website_id: @website, autolink: attributes_for(:website_autolink)
            }.to change(Autolink, :count).by(1)
        end

        it "redirects to the 'index' page" do
            post :create, website_autolink: @autolink, website_id: @website
            response.should redirect_to website_autolink_path
        end
    end
end

この行は機能していません:

response.should redirect_to website_autolink_path

エラーメッセージを表示します:

ActionController::RoutingError:
   No route matches {:action=>"show", :controller=>"autolinks"}

私の工場は次のようになります。

自動リンク:

FactoryGirl.define do
  factory :website_autolink do
    name "MyName"
    url "http://www.myurl.nl"
    association :website
  end 
end

Webサイト:

FactoryGirl.define do
  factory :website do
    name "Test"
    domain "http://www.test.nl"
  end 
end

私のAutolinkController:

def create
    if params[:website_id].present?
        @website = Website.find(params[:website_id])
        @autolink = @website.autolinks.create(params[:autolink])
    else
        @autolink = Autolink.new(params[:autolink])
    end

    respond_to do |format|
        if @autolink.save
            if params[:website_id].present?
                format.html { redirect_to [@website, @autolink], notice: "Autolink is met succes aangemaakt." }
            else
                format.html { redirect_to autolinks_path, notice: "Autolink is met succes aangemaakt." }
            end
            format.json { head :no_content }
        else
            format.html { render action: "new" }
            format.json { render json: @autolink.errors, status: :unprocessable_entity }
         end
    end
end

私のコントローラー内で、次の行はRspecを使用してシミュレートしたい行です。

format.html { redirect_to [@website, @autolink], notice: "Autolink is met succes aangemaakt." }

私のローカルホストではすべて機能していますが、このネストされたルートの実際のテストを作成すると問題が発生します。

4

1 に答える 1

1

私は自分の問題の解決策を見つけました。create アクションのコントローラー仕様は次のようになります。

describe "POST create when params[:website_id] are present" do
  context "with valid attributes and params[:website_id] are present" do
    before(:each) do
        @website = create(:website)
        @autolink = attributes_for(:website_autolink, website: @website)
      end

        it "saved the autolink in the database" do
            expect{
                post :create, autolink: @autolink, website_id: @website.id
            }.to change(Autolink, :count).by(1)
        end

        it "redirects to the 'index' page" do
            post :create, autolink: @autolink, website_id: @website.id
            response.should redirect_to website_autolink_path(@website, assigns(:autolink))
        end
    end
end

ネストされたパスに redirect_to するために、オートリンクを割り当てる必要がありました。それがなければ、自動リンクの ID が見つかりませんでした。

于 2013-02-06T09:39:53.917 に答える