在我的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>
答案 0 :(得分: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)
答案 1 :(得分:-1)
试试这段代码:
def index
tagged_nodes = Node.includes(:user_tags).tagged_with(current_user.email)
end
您可以使用 controller.tagged_nodes
访问tagged_nodesexpect(controller.tagged_nodes)
.to match Node.includes(:user_tags).tagged_with(u1.email)