我在/rails_root/lib/common/common_log.rb中创建了一个模块 并将其包含在ApplicationController中, 从我的控制器调用它通常是结束。 然后我做了rspec。但是有一个错误。 我无法理解如何在spec文件中编写params。 请帮我解决一下。
#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)>'
#my模块文件common_log.rb
module CommonLog
def log_error(msg)
Rails.logger.error "E: controller : #{params[:controller]} action : #{params[:action]} msg=#{msg}"
end
end
#我的spec文件
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
答案 0 :(得分:0)
您必须使用RSpec's anonymous controller功能。
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控制器中,因此它可以为您提供所需的控制:用于指定模块的控制器上下文。