Как проверить локальную переменную внутри контроллера с помощью 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)