2013-06-15 4 views
0

Я сделал модуль в /rails_root/lib/common/common_log.rb и включил его в ApplicationController, , вызывающий его из моего контроллера, как правило, заканчивается. , тогда я сделал rspec. но произошла ошибка. Я не могу понять, как написать params в spec-файле. Пожалуйста, помогите мне решить эту проблему.Как я могу проверить использование параметров рельсов вне рельсов контроллера

# 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 

ответ

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 

Что вы здесь делаете, это создание анонимного контроллера, который включает в себя модуль, который вы хотите специфицировать. Поскольку этот модуль предназначен для включения в контроллер рельсов, он дает вам именно то, что вам нужно: контекст контроллера для спецификации вашего модуля.

+0

Я рад видеть вашу помощь. этот модуль находился внутри контроллера rails. Я достиг своей цели с вашим советом. Для меня полезны документы Rspec анонимного контроллера. Большое спасибо за вашу доброту. – shoon

Смежные вопросы