2017-05-12 13 views
0

私はRailsでアプリケーションをテストしていますが、私は理解できません。基本的なCRUD機能を備えた「Families」という表があります。新しいビューで新しい "ファミリ"を作成するとき、タイトルが検証されない場合、新しいビューは再びレンダリングされるはずです。それはそうです。しかし、URLは「ファミリー/新規」から「ファミリー」に変わります。ビューとURLが一致しません。その結果、私のテストは失敗しています。なぜ私のURLにこれが起こっていますか?ここに私のテストでは、次のとおりです。ここでRailsのURLが表示されずに変更される

require 'rails_helper' 

feature "Creating a family" do 

scenario "A user creates a family with invalid title" do 
    visit '/' 
    click_link 'Create Family' 
    click_button "Create" 
    expect(page.current_path).to eq(new_family_path) 
end 

end 

は新しいですし、私のコントローラにアクションを作成:

def new 
    @family = Family.new 
end 

def create 
    @family = Family.new(family_params) 
    if @family.save 
     redirect_to root_path 
    else 
     flash.now[:danger] = "There was a problem" 
     render :new 
    end 
end 

ファミリーモデル:右ここ

class Family < ApplicationRecord 

    validates :title, presence: true 

end 
+0

あなたが見ているのは通常のレールの動作ですが、カピバラの待機中の再試行動作を打ち負かすので、 'e_'マッチャーで' current_path'を使用しないでください。代わりに 'have_current_path'マッチャー - ' expect(page).to have_current_path(new_family_path) 'を使用してください。 JS対応のドライバに移行すると、テストの安定性が大幅に向上します。 –

答えて

2

def create 
    @family = Family.new(family_params) 
    if @family.save 
    redirect_to root_path 
    else 
    flash.now[:danger] = "There was a problem" 
    render :new 
    end 
end 

createの行動に当たったときあなたはにPOSTです。あなたはrender :newです - これは、new部分的な表示でfamilies URLにあなたを残します。

あなたはfamilies/newのURLで終わるしたい場合は、あなたがより多くのような何かをする必要があります。

def create 
    @family = Family.new(family_params) 
    if @family.save 
    redirect_to root_path 
    else 
    flash.now[:danger] = "There was a problem" 
    redirect_to new_family_path 
    end 
end 

は覚えておいてください:レンダリングとルーティングは、2つの別々のものです。 render :newというのは、new_families_pathのURLに終わるはずがないということを意味するものではありません。 2つの異なること。

1

ビューがレンダリングされていますが、POSTエンドポイントcreateをヒットしてからnewにレンダリングしたため、POSTエンドポイントがURLに表示されます。

フォームにユーザー入力を表示するために使用すると仮定している@familyオブジェクトに保存されているデータが失われるため、ここではnewにリダイレクトすることは望ましくありません。

URLが/newであることを確認するのではなく、ページに再度フォームが表示されているか、フラッシュメッセージが表示されているかどうかを確認することをおすすめします。

関連する問題