0

/rails_root/lib/common/common_log.rb にモジュールを作成し、ApplicationController にインクルードしました。コントローラーから呼び出すと、通常は終了します。それから私はrspecをしました。しかし、エラーがありました。仕様ファイルにパラメータを書き込む方法がわかりません。それを解決するのを手伝ってください。

# rspec 出力エラー
Failures:
  1) CommonLog log_error
     Failure/Error: log_error("xxx")
     NameError:
       undefined local variable or method `params' for #<RSpec::Core::ExampleGroup::Nested_1:0x3196f
50>
     # ./lib/common/common_log.rb:3:in `log_error'
     # ./spec/lib/common/common_log_spec.rb:6:in `block (2 levels) in <top (required)>'
# 私のモジュールファイル common_log.rb
module CommonLog
  def log_error(msg)
    Rails.logger.error "E: controller : #{params[:controller]}  action : #{params[:action]} msg=#{msg}"
  end
end
# 私の仕様ファイル
require 'spec_helper'
require File.expand_path("../../../../lib/common/common_log", __FILE__)
include CommonLog
describe CommonLog do
  it "log_error" do
    log_error("xxx")
  end
end
4

1 に答える 1

0

RSpec の匿名コントローラー機能を使用する必要があります。

  require 'spec_helper'
  require File.expand_path("../../../../lib/common/common_log", __FILE__)

  describe CommonLog, type: :controller do


  controller do
    include CommonLog
    def index
       render nothing: true
    end
  end

  it "log_error" do
    params = {param1: :value1}
    get :index, params
    #Do the specs you want here
  end
end

ここで行っているのは、指定したいモジュールを含む匿名コントローラーを作成することです。このモジュールは Rails コントローラー内に含まれることを意図しているため、必要なものを正確に提供します: モジュールを指定するためのコントローラーのコンテキスト。

于 2013-06-15T08:27:31.607 に答える