У меня есть приложение 4.1.16 API, которое проверено с помощью RSpec 3.4.0, и я испытываю проблемы с классами тестирования с одинаковым именем в другом модуль.Rails и RSpec: Контроллеры тестирования с тем же именем в разных пространствах имен (модуль)
Структура:
app/controllers/bar/notifications_controller.rb
class Bar::NotificationsController < ApiController
...
end
и контроллер с тем же именем в другом модуле:
app/controllers/foo/bar/notifications_controller.rb
module Foo
class Bar::NotificationsController < ApiController
...
end
end
Foo
новый модуль и не имеет испытаний еще. После его добавления все соответствующие тесты контроллера для старого Bar::NotificationsController
начали сбой.
Спецификация Файл:
spec/controllers/bar/notifications_controller_spec.rb
require 'spec_helper'
describe Bar::NotificationsController, type: :controller do
...
end
Все тесты в этом файле спецификации не в состоянии с той же ошибкой:
RuntimeError:
@controller is nil: make sure you set it in your test's setup method.
Проблема не существует, когда я изменить имя контроллера в Foo
модуле :
app/controllers/foo/bar/foo_notifications_controller.rb
module Foo
class Bar::FooNotificationsController < ApiController
...
end
end
Я уже пробовал добавление сверху файла спецификации require 'bar/notifications_controller'
и с использованием имени класса в виде строки describe "Bar::NotificationsController, type: :controller
, но это не решило проблему (та же ошибка).
Почему это происходит? Каково решение?
Я хочу верить, что есть крошечная вещь, которую я еще не пробовал, и мне не нужно загрязнять свой код и структуру бессмысленными именами, просто чтобы пропустить спецификации.
Большое спасибо за вашу помощь!
Можете ли вы попытаться определить пространства имен с помощью 'module Bar' вместо определения в самом имени класса? – emaillenin
Попробуйте 'описать :: Bar :: NotificationsController, type:: controller do' –
К сожалению, это не сработало. – Anita