0

RSpec 2 に飛び込もうとしましたが、その自動生成されたコントローラー スペックは、Ruby のどのバージョンまたは Rails のどのバージョンでも、RSpec 2 のどのバージョンでも機能しません。多分私は明らかな何かを見逃していますか?

def mock_category(stubs={})
  @mock_category ||= mock_model(Category, stubs).as_null_object
end

describe "GET show" do
  it "assigns the requested category as @category" do
    Category.stub(:find).with("37") { mock_category }
    get :show, :id => "37"
    assigns(:category).should be(mock_category)
  end
end

これはから自動生成されますrails g scaffold Category

RSpec はこれを返します:

Failures:
   1) CategoriesController GET show assigns the requested category as @category
    Failure/Error: assigns(:category).should be(mock_category)
    expected Category_1002, got nil
    # ./spec/controllers/categories_controller_spec.rb:21
    # /Library/Ruby/Gems/1.8/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:239:in `inject'

このモック/スタブが返されるのはなぜnilですか?

アップデート

これは、コントローラーの show メソッドからのものです。

def show
   @category = Category.find(params[:id])

  respond_to do |format|
    format.html # show.html.erb
    format.xml  { render :xml => @category }
  end
end

ありがとう!

4

2 に答える 2

0

RSpec には、Rails3 ベータ版、RSpec 2 beta.10 から Rails3 リリース、および RSpec 2 beta.20 の間にいくつかの深刻な競合があります。

足場の違いをコピーして貼り付けてみましたが、すべてのスペックを削除して再生成することで、状況を完全にクリアしました。をアンインストールし、レール 3hamlのみをインストールします。haml-rails

すべての仕様は現在実行されています。

于 2010-09-04T13:29:25.123 に答える
0

うーん。何かが間違っている場合、私は確かにそれを見ません。たぶん、showアクションはまったく達成されていませんか?before_filter邪魔になる発言はありますか?

いくつかのテストを追加して、割り当てに到達しているかどうかを確認できます。お気に入り

controller.should_receive(:show)

ところで.as_null_object、スタブしていないメッセージを無視するようにモックに指示します。これは、検証やその他の制約に依存するオブジェクトに役立ちます。これがなければ、テスト可能なオブジェクトを取得するためにスタブ化する必要があります。ただし、テストする必要があるメッセージを無視しないように注意してください。

于 2010-09-03T19:14:47.177 に答える