1

rspecを使用して既存のRailsプロジェクトをテストしようとしています。そして、コントローラーをテストしたいのですが、解決できないエラーが発生します:S

これが私のスペックコードです;

require 'spec_helper'

describe BriefNotesController do

  before(:all) do
    @customer=Factory(:customer)
    @project=Factory(:project_started, :owner => @customer)
  end

  context 'get :new' do

    it 'should redirect to login page for not signed in users' do
      get :new, :project_id => @project.id
      response.should redirect_to("/kullanici-girisi")
    end

    it 'should be success and render new brief note page for project owner' do
      sign_in @customer
      get :new, :project_id => @project.id
      response.should be_success
    end

  end

end

これが私のコントローラーコードです;

class BriefNotesController < ApplicationController
  before_filter :authenticate_user!
  before_filter :find_project

  def new
    @brief_note = @project.brief_notes.new
  end

  def create
    @brief_note = @project.brief_notes.build(params[:brief_note])
    if @brief_note.save
      redirect_to brief_project_path(@project)
    else
      render :action => :new
    end
  end

private
  def find_project
    @project = current_user.projects.find_by_cached_slug([params[:project_id]])
  end
end

current_user.projects.find_by_cached_slugメソッドは機能しないと思います。つまり、これはエラーです。

Failures:

  1) BriefNotesController get :new should be success and render new brief note page for         project owner
 Failure/Error: get :new, :project_id => @project.id
 NoMethodError:
   undefined method `brief_notes' for nil:NilClass
 # ./app/controllers/brief_notes_controller.rb:6:in `new'
 # ./spec/controllers/brief_notes_controller_spec.rb:19:in `block (3 levels) in <top (required)>'
4

2 に答える 2

1

find_projectエラーはフィルターから発生しています:find_by_cached_slugに割り当てられたnilを返しています。これは、(アクションで)呼び出された@projectときに未定義のメソッドエラーをトリガーします。brief_notesnew

あなたのスペックの説明から、私はそれがコードを実行するべきではなくnew、代わりにリダイレクトするべきではないとauthenticate_user!思いますか?私は自分でデバイスを使用していません(これはデバイスの方法ですよね?)ので、その方法の詳細はわかりませんが、それがあなたの問題の原因だと思います。

問題はFactoryGirl構文ではないと思います。これは非推奨ですが、引き続き機能するはずです。

于 2012-08-30T21:36:36.880 に答える
1

モデルに関する詳細情報がないとはっきりとは言えませんが、おそらく原因は、リクエストパラメータとして@ project.idを渡しているのに、cached_slugでルックアップを行っていることです。代わりに@project.to_paramを試してください。

于 2012-08-31T15:50:25.473 に答える