2

このコードがあるとしましょう

class SomeController < ApplicationController
  def some_methode
    some_var = some_value
    render text: some_var
  end
end

今、Rspecで、コントローラーをさまざまな値でテストしたいと考えています。
に割り当てるsome_other_valueにはどうすればよいsome_varですか?
私はスタブを見ましたが、うまくいきません。私は試した:

assign(:some_var, some_other_value )
controller.some_methode.stub(some_var: some_other_value )
some_methode.stub(some_var: some_other_value )
controller.some_methode.stub!(some_var: some_other_value )
controller.some_methode.stub(:some_var).and_return(some_other_value )

それらのどれも機能しません。some_varに変わらないsome_other_value

4

1 に答える 1

2

some_var値が割り当てられていることをテストしたい場合はsome_value、次を使用できますassigns(リストにないことに気づきました):

it "assigns some_value to some_var" do
  get :some_method
  assigns(:some_var).should == some_value
end

ただし、 toの割り当てを実際にオーバーライドしたい場合は、コントローラー コードを再考 (および場合によってはリファクタリング) することをお勧めします。rspec でこれが可能だとは思いませんが、可能であったとしても、ここで行うのは正しいことではないと思います。some_valuesome_var

some_valueが変更されるものである場合は、それ用のコントローラー メソッドを作成し、そのメソッドをスタブ化することをお勧めします。

たとえば、コントローラー コードでメソッドget_valueを作成し、それに割り当てますsome_var

def some_method
  some_var = get_value
  render text: some_var
end

private

def get_value
  some_value
end

get_value次に、仕様をスタブできます。

it "does something when some_var is assigned value_to_test" do
  controller.stub(:get_value).and_return(value_to_test)
  get :some_method
  ... should ...
end

一方some_value、ハッシュから来ている場合paramsは、HTTP アクションの呼び出しに渡されるものを変更することで制御できます。

it "does something when passed value_to_test" do
  get :some_method, :some_var => value_to_test
  ... should ...
end

これは、コントローラー アクションに設定されますparams[:some_var]value_to_test

これについての詳細は、この議論も参照してください(少し古いですが関連があります)。

于 2012-09-27T13:05:34.903 に答える