2015-01-08 2 views
1

У меня есть этот Rails API, и я пытаюсь проверить два действия в моем контроллере. Первый должен назвать второй. Как я могу это сделать с помощью RSpec?Тестирование вызова метода с аргументами с использованием RSpec и Rails

Эти действия:

def method1 
    (...) 
    method2(@example_var) 
end 

def method2(id) 
    (...) 
end 

До сих пор я пытался это, но безуспешно

describe "#method1" do 
    it "calls the method2 with id" do 
     Rails::logger.info "Testing METHOD1" 
     var = Parent.create(FactoryGirl.attributes_for(:valid_attributes)) 
     get :method1, :id => var.id 

     Parent.should_receive(:method2).with(var.id) 
     Parent.method2 
    end 
end 

Любая помощь?

EDIT: Если информации недостаточно, я с удовольствием предоставит больше.

+0

1. Пожалуйста, включите больше контроллера. Является ли класс «Родитель»? 2. Я думаю, вам нужно будет установить ожидаемое (should_receive), прежде чем выполнять действие, которое вы ожидаете вызвать (вызов get: method1). 3. Почему вы вызываете метод2 явно? – Coenwulf

+1

Я решил свою проблему тем временем, но так как я довольно новичок в Rails, я все испортил. Спасибо за ваш ответ. – skimisha

ответ

0

Это не совсем ответ, но это было то, что я намеревался и решение к нему :) Надеюсь, что это может помочь кому-то, кто нуждается в его

тест:

describe "GET #method1" do 
    it "gets a parent by :id and redirect_to #method2" do 
     Rails::logger.info "Testing METHOD1 with redirect to METHOD2" 
     vars = Parent.create(FactoryGirl.attributes_for(:valid_params)) 

     expect redirect_to('method2/' + vars.field1 + '/' + vars.field2 + '/' + vars.field3) 
    end 
end 

контроллер:

def close 
    (...) 
    redirect_to :controller => 'Parents', :action => 'method2', :field1 => @parent[:field1], :field2 => @parent[:field2], :field3 => @parent[:field3] 
end 
0
  1. method2 не вызывается на Parent. Он будет вызван на экземпляр контроллера
  2. Ожидание должно быть установлено до совершения звонка
  3. Есть ли method2 частный метод? Если это действие, вы должны перенаправить на действие вместо вызова метода.

Но если вы хотите установить expection на method2 вызов, выполните следующие действия

describe "#method1" do 
    it "calls the method2 with id" do 
     Rails::logger.info "Testing METHOD1" 
     var = Parent.create(FactoryGirl.attributes_for(:valid_attributes)) 
     @controller.should_receive(:method2).with(var.id) 
     get :method1, :id => var.id 
    end 
end 
+0

Спасибо за ваши усилия! Я уже решил проблему. Прочитайте мой комментарий выше. Я бы поднял вас, но у меня пока нет достаточной репутации :( – skimisha

Смежные вопросы