Добавление макросов контроллера в Rspec - PullRequest
3 голосов
/ 20 ноября 2010

Я пытаюсь определить некоторые макросы контроллера для Rspec.Я использую rails 3 и мои макросы определены в spec / support / macros / controller_macros.rb, этот файл выглядит так:

module ControllerMacros
    def self.login_admin
        #code
    end
end

в моем помощнике спецификаций у меня есть:

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

Так что в моей спецификации контроллера я просто вызываю login_admin в моих тестах администратора, но когда я использую метод, я получаю

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

Сначала я предположил, что controller_macros.rb не был включен, но когда я добавил«помещает» в файл, но это показывает, что файл, по крайней мере, выполняется.

Я не вижу ничего плохого в моей установке, и копирование метода login_admin в блок описания работает нормально, поэтому я не уверен, что случилосьс этим.

Ответы [ 3 ]

10 голосов
/ 25 января 2011

Возможно, я опоздал к этому, но для новичков.

Вот хорошие примеры использования макросов:

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

когда вы include модуль, методы которого видны внутри примеров.

Но когда вы расширяете модуль, его методы видны только за пределами примеров.составить макросы для каждой ситуации.

2 голосов
/ 20 ноября 2010

Попробуйте

ControllerMacros.login_admin

или удалите self из определения метода.

1 голос
/ 06 января 2013

Ответ в одну строку: Удалить 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)

...