2015-05-04 1 views
7

В моей Dashboard#Index, у меня есть это:Как проверить локальную переменную внутри контроллера с помощью Rspec?

def index   
    tagged_nodes = Node.includes(:user_tags).tagged_with(current_user.email)  
    end 

Как проверить это с RSpec?

Я пробовал:

expect(assigns(tagged_nodes)).to match Node.includes(:user_tags).tagged_with(u1.email) 

Но это дает мне эту ошибку:

NameError: 
     undefined local variable or method `tagged_nodes' for #<RSpec::ExampleGroups::DashboardController::GETIndex:0x007fe4edd7f058> 

ответ

9

Вы не можете (и не должны) тест локальных переменных. Тем не менее, вы можете и должны проверить переменные экземпляров, которые начинаются с @. Для этого вы используете вспомогательный помощник assigns, передавая ему имя переменной экземпляра в качестве символа. Если мы хотим получить значение переменной экземпляра @tagged_nodes, мы вызываем assigns(:tagged_nodes) (обратите внимание на :).

Так что, если ваш метод управления выглядит следующим образом:

def index   
    @tagged_nodes = Node.includes(:user_tags).tagged_with(current_user.email)  
end 

... вы бы получить доступ к @tagged_nodes с assigns(:tagged_nodes):

expect(assigns(:tagged_nodes)) 
    .to match Node.includes(:user_tags).tagged_with(u1.email) 
+0

Yeh .... Я знаю, как тестировать переменные экземпляра. Так что, если у меня нет локальных переменных в контроллере? – marcamillion

+2

У вас могут быть локальные переменные, но вам не нужно их тестировать. Вы должны проверить внешнее поведение контроллера: заданный определенный запрос, какой ответ он дает (или какие данные он передает в представление). Локальные переменные являются частным состоянием, и, как правило, вы не тестируете личное состояние. –

+0

Ahh ок. В этом есть смысл. – marcamillion

0

Попробуйте этот код:

def index   
    tagged_nodes = Node.includes(:user_tags).tagged_with(current_user.email)  
end 

вы бы accessgedged_nodes с controller.tagged_nod es

expect(controller.tagged_nodes) 
    .to match Node.includes(:user_tags).tagged_with(u1.email) 
Смежные вопросы