Частный метод контроллера Rspec

Можно ли протестировать частный метод в контроллере? По сути, это определяет, следует ли сохранять запись в базе данных.

def create
    logger.debug "inside CREATE"
    @schedule = Schedule.new(params[:schedule])

    if is_valid_schedule # <-- this is the private method
        if @schedule.save
            flash[:success] = "New schedule entry added!"
            redirect_to @schedule
        else
            render 'new'
        end
    else
        flash.now[:error] = "Schedule has an overlap"
        render 'new'
    end
end

Мои тесты выглядят так:

describe "POST #create" do

        let!(:other_schedule) { FactoryGirl.create(:schedule) }

        before(:each) { get :new }

        describe "with valid attributes" do
            it "saves the new schedule in the database" do


                expect{ post :create, schedule: other_schedule }.to change(Schedule, :count).by(1)

            end

            it "redirects to the :show template" do
                post :create, schedule: other_schedule
                response.should redirect_to other_schedule
                flash[:success].should eq("New schedule entry added!")
            end
        end

person janejanejane    schedule 11.01.2013    source источник
comment
Не ответ для вас, но прочитайте этот SO вопрос и ответ, чтобы узнать мнение о спецификациях частных методов.   -  person Paul Fioravanti    schedule 11.01.2013
comment
Мой тест теперь работает, поэтому нет необходимости проверять частный метод. Спасибо, Пол.   -  person janejanejane    schedule 11.01.2013
comment
Итак, janejanejane, что вы сделали, чтобы ваши тесты заработали?   -  person einSelbst    schedule 08.09.2014


Ответы (1)


Во время создания теста метода вызывается и тестируется частный метод is_valid_schedule. Если вы хотите протестировать этот частный метод отдельно. Посмотрите на пример ниже:

class Admin::MembersController < Admin::BaseController
  #some code
  private
   def is_valid_example
     @member.new_record?
   end
end

И проверьте частный метод:

require 'spec_helper'
describe Admin::MembersController do
 .... 
 #some code
  describe "test private method" do
   it "should be valid" do
     member = FactoryGirl.create(:member)
     controller.instance_variable_set('@member', member)
     controller.send(:is_valid_example).should be(false)
   end
  end
end
person Zh Kostev    schedule 11.01.2013
comment
Спасибо за ответ Ж, но мои тесты наконец-то заработали без проверки приватного метода. - person janejanejane; 11.01.2013