RSPEC доступа к методам Application_Controller, таких как «Current_User»
-
03-10-2019 - |
Вопрос
Я пытаюсь опубликовать метод на моем ente_user (используя модифицированный раствор Authful_authentication Authent) с rspec. Я полностью не уверен, как я могу получить доступ к этому методу в моем спецификациях контроллера. Current_user само по себе не работает. Нужно ли мне сначала получить контроллер? Как мне это сделать?
С использованием rails 2.3.5
, rspec 1.3.0
а также rspec-rails 1.3.2
# my_controller_spec.rb
require 'spec_helper'
describe MyController do
let(:foos){ # some array of foos }
it "fetches foos of current user" do
current_user.should_receive(:foos).and_return(foos)
get :show
end
end
Производит
NoMethodError in 'ChallengesController fetches foos of current user'
undefined method `current_user' for #<Spec::Rails::Example::ControllerExampleGroup::Subclass_1::Subclass_1::Subclass_2::Subclass_2:0x7194b2f4>
Решение
RSPEC-Rails дает вам controller
Способ использования в примерах контроллера. Так:
controller.stub!(:current_user).with(:foos).and_return(foos)
должен работать.
Другие советы
Как это может знать, где найти current_user
? Это должно решить это:
subject.current_user.should_receive(:foos).and_return(foos)
Я не совсем знаком с redful_authentication, просто authLogic и разработке, но это, вероятно, похоже в этом current_user
это метод контроллера, а не объект, который связан с вызовом should_receive
на нем не работает, как ожидалось (вы устанавливаете ожидание на объекте, который current_user
возвращается, но метод не доступен в объеме вашего ожидания).
Попробуй это:
stub!(:current_user).and_return(foos)
Я читаю это и немного настроил мину. Если вы просто хотите пройти через объект пользователя в свой тест RSPEC, вы можете использовать это:
Во-первых, создайте объект пользователя в тесте RSPEC. Например: (используйте любые необходимые вами атрибуты или необходимы для создания объекта пользователя.)
user = user.create (Имя: «Тед»)
(Примечание. Вы также можете использовать завод из заводской машины.)
Теперь, с этим пользовательским объектом, который сохраняется в переменную «Пользователь», сделайте это в том же тесте RSPEC:
Controller.Stub! (: Current_user) .and_return (пользователь)
Это должно работать ...