3

Ruby on Rails の世界は初めてです。

テスト ケースからコントローラーのインスタンス変数にアクセスする方法が少なくとも 1 つあることに気付きました。

実際、次のテスト方法を想定してください。

test "should get index" do
    get :index
    assert_response :success
    assert_not_nil assigns(:products)
end

products関連するコントローラー内に含まれるインスタンス変数です。確かに、テストケースにはこのコントローラーへの参照があります。したがって、assigns()メソッドはそれを使用してコントローラーのインスタンス変数のハッシュを検査し、以前にこのコントローラーへのアクションを呼び出した他のファイルから正確なオブジェクトにアクセスできるようにします。

だから私は2つの質問を疑問に思います:

assigns()メソッドを使用する代わりに、コントローラーへの「バインディング」を作成しないのはなぜですか?

それが可能なバージョンを想像します:

test "should get index" do
        get :index
        assert_response :success
        assert_not_nil @products
end

短くてきれいになりませんか?

バインディングは、次のリンクに示すように、ERB ファイルがコントローラーのインスタンス変数にアクセスできるようにするメカニズムです。

http://rrn.dk/rubys-erb-templating-system

このメカニズムがテストケースに適用できないのは何ですか? assigns()メソッドは必須ですか?

4

1 に答える 1

7

ただし、バインディングを持ち込んだ場合、これは合格する可能性がありますが、合格するべきではありません

test "should get index" do
    @fake_products = [1,2,3]
    get :index
    assert_response :success
    assert_not_nil @fake_products
end

テスト内のすべてのインスタンス変数をコントローラー内のインスタンス変数と組み合わせる必要は必ずしもありません。Assigns を使用すると、アサーションをコントローラーのインスタンス変数だけに「スコープ」できます。

于 2012-06-26T15:06:02.427 に答える