3

Rspec 用のいくつかのコントローラー マクロを定義しようとしています。Rails 3 を使用していて、spec/support/macros/controller_macros.rb でマクロを定義しています。そのファイルは次のようになります。

module ControllerMacros
    def self.login_admin
        #code
    end
end

私のspecヘルパーには次のものがあります:

config.include(ControllerMacros, :type => :controller)

したがって、コントローラーの仕様では、管理者テストで login_admin を呼び出すだけですが、メソッドを使用するたびに取得します

undefined local variable or method `login_admin' for #<Class:0xb6de4854> (NameError)

最初は、controller_macros.rb が含まれていないと思っていましたが、ファイルに「puts」を追加すると、ファイルが少なくとも実行されていることがわかりました。

セットアップに問題は見られず、login_admin メソッドを記述ブロックにコピーしても問題なく動作するので、何が問題なのかわかりません。

4

3 に答える 3

10

遅れているかもしれませんが、初心者向けです。

マクロを使用した良い例を次に示します。

http://osmose.6spot.com.br/2011/01/rails-resource-routing-spec-w-rspec/

モジュールを含めると、そのメソッドがサンプル内に表示されます。

ただし、モジュールを拡張すると、そのメソッドは例の外でのみ表示されます。

それぞれの状況に合わせてマクロを作成する方法を提供します。

于 2011-01-25T01:40:55.857 に答える
2

試す

ControllerMacros.login_admin

selfまたはメソッド定義から削除します。

于 2010-11-19T22:08:43.267 に答える
1

1 行の答え:メソッド定義から self を削除します

なんで?含まれるモジュールのメソッドは RSpec の例で利用可能です

login_adminで定義されたメソッドはControllerMacros、RSpec の例で次のように使用できます。login_admin

具体的に言うと:

のように書き換えspec/support/macros/controller_macros.rbます。

module ControllerMacros
    def login_admin
        #code
    end
end

次に、Rspecにマクロを含めるように指示します

config.include(ControllerMacros, :type => :controller)

于 2013-01-06T16:51:43.650 に答える