23

私はrspecを学ぼうとしています。Railsコントローラーメソッドをテストできないようです。テストでメソッドを呼び出すと、rspecは未定義のメソッドエラーを返すだけです。これが私のテスト例です

it 'should return 99 if large' do
  GamesController.testme(1000).should == 99
end

そしてここにエラーがあります:

 Failure/Error: GamesController.testme(1000).should == 99
 NoMethodError:
   undefined method `testme' for GamesController:Class

GamesControllerにtestmeメソッドがあります。テストコードが私のメソッドを認識できない理由がわかりません。

どんな助けでも大歓迎です。

4

2 に答える 2

39

私は正しい方法はこれだと思います:

describe GamesController do
  it 'should return 99 if large' do
    controller.testme(1000).should == 99
  end
end

Railsコントローラーの仕様では、コントローラークラスをに入れると、メソッドをdescribe使用controllerしてインスタンスを取得できます:P
明らかに、testmeメソッドがプライベートの場合は、引き続き使用する必要がありますcontroller.send :testme

于 2013-09-22T18:59:46.450 に答える
7

クラスメソッドをテストしようとしましたが、コントローラーにインスタンスメソッドがあります

あなたが必要ですGamesController.new.testme(1000).should == 99

またはGamesController.new.send(:testme, 1000).should == 99、私が思うに、これはアクションメソッドではなく、プライベートまたは保護されているためです。

アクションメソッドはこの方法でテストされます

于 2012-04-07T05:07:19.397 に答える