RSPEC доступа к методам Application_Controller, таких как «Current_User»

StackOverflow https://stackoverflow.com/questions/3720953

Вопрос

Я пытаюсь опубликовать метод на моем 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, вы можете использовать это:

  1. Во-первых, создайте объект пользователя в тесте RSPEC. Например: (используйте любые необходимые вами атрибуты или необходимы для создания объекта пользователя.)

    user = user.create (Имя: «Тед»)

    (Примечание. Вы также можете использовать завод из заводской машины.)

  2. Теперь, с этим пользовательским объектом, который сохраняется в переменную «Пользователь», сделайте это в том же тесте RSPEC:

    Controller.Stub! (: Current_user) .and_return (пользователь)

Это должно работать ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top