Как проверить локальную переменную внутри контроллера с помощью Rspec?

в своем Dashboard#Index, у меня есть это:

  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>

2 ответов


вы не можете (и не должны) проверить локальные переменные. Однако, вы можете и должны проверить экземпляр переменные, которые начинаются с @. Для этого вы используете assigns helper, передавая ему имя переменной экземпляра в качестве символа. Если нам нужно значение переменной экземпляра @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)

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

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

доступ к tagged_nodes с контроллер.tagged_nodes

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