1

私はモジュールを持っています

module Foo
  def normalize name
    # modify and return
  end
end

モデルにうまくミックスできます...

class Something
  include Foo
end

Something.new.normalize "a string" # works

そして、コントローラーにミックスインしてみてください...

class SomeController < ApplicationController
  include Foo

  def some_action
    normalize "a string"
  end
end

SomeController#some_action # 機能テストでは機能しますが、Rails サーバー内では機能しません!

モジュールのさまざまな形式を試し、ActiveSupport::Concern を拡張し、インクルード ブロックを追加し、正規化をクラス メソッドに変更しましたが、同じ結果が得られました。これが機能テストでは機能するのに、機能テスト以外では機能しないのはなぜですか?

何か簡単なものが欠けているような気がします。

4

1 に答える 1

3

テストで「機能した」理由は、テストにもモジュールが含まれ、正規化メソッドが呼び出されたためです。

class SomeControllerTest < ActionController::TestCase
  include Foo

これにより、コントローラーで使用できるようになりました...どういうわけか。

include Foo を削除すると、テストも失敗しました。

コントローラーを機能させるために、変更しました

normalize "a string"

self.normalize "a string"
于 2014-09-18T02:58:18.450 に答える