0

ユーザーがフォームに入力して新しいプロジェクトを作成できることをテストしたいとします。私が訪問する必要があるルートは:new_user_project_path(:user_id)です。

したがって、私の機能 rspec は現在次のようになっています。

feature "User creates a project" do
  scenario "Logged in User creates a project" do
    login_with_oauth #this sets current_user
    visit new_user_project_path 
    fill_in 'Title', :with => 'Colchasdadasdasoneta'
    fill_in 'Description', :with => 'lalalssalsalas'
    click_in 'Create Project'
  end
end

おわかりのように、:user_id を渡す必要があるため、この訪問 new_user_project_path は使用できません。私の質問は、どうすれば current_user にアクセスできますか? または、この種のものをテストする正しい方法は何ですか?

4

2 に答える 2

1

ルートに問題があります。問題を直接修正するのは簡単ですが、コード ロジックを再確認することをお勧めします。

新しいプロジェクトを作成するために、ユーザー ID をパス パラメータとして定義しないでください。代わりに、プロジェクト インスタンスは current_user によって開始される必要があります。

新しいプロジェクトをユーザーに関連付けるには、コントローラーで行うだけです

@project = current_user.projects.new

結論は:

  1. 上記と同様のコントローラーコードを変更します
  2. ルートを従来のリソースに復元します。
  3. 次に、もう少し期待値を追加する必要がありますが、テストをそのまま使用します。
于 2013-07-06T17:17:06.180 に答える
0

login_with_oauthあなたが書いたspecヘルパーメソッドであると仮定すると、セットアップしたユーザーを返すことができます。次に、次のことができます。

feature "User creates a project" do
  scenario "Logged in User creates a project" do
    user = login_with_oauth
    visit new_user_project_path(user)

それが機能せず、login_with_oauth制御できないものである場合 (たとえば、ライブラリからのものなど)、データベースから最初のユーザーを取得できます。これは、データベースに他のユーザーがいないことを前提としていますが、テストはクリーンで自律的でなければならないため、そうすべきではありません。次に、次のようにします。

feature "User creates a project" do
  scenario "Logged in User creates a project" do
    login_with_oauth
    user = User.first
    visit new_user_project_path(user)
于 2013-07-06T17:17:35.850 に答える