`Assigns` 在我的集成测试中不起作用
`Assigns` isn't working in my integration test
我正尝试按照 上的建议编写测试。
我的简化测试:
test "test" do
log_in_as(@user)
get users_path
assert_template 'users/index'
assigns[:users].each do
assert_select 'a[href=?]', users_path(user)
end
end
错误结果:
NoMethodError: undefined method `each' for nil:NilClass
控制器方法:
def index
@users_grid = initialize_grid(User.where(verified: true),
per_page: 15,
order: 'users.username',
order_direction: 'desc')
end
显然 assigns[:users]
是空的,即使在 fixtures 文件中有用户。我究竟做错了什么?我知道 assigns[:users]
应该分配与 users/index
上显示的完全相同的用户,这正是我想要的。
嗯,您的正确代码是:
test "test" do
log_in_as(@user)
get users_path
assert_template 'users/index'
# in your controller you have the instance var as
# @users_gird, not @users.
assigns[:users_grid].each do
assert_select 'a[href=?]', users_path(@user)
end
end
assigns
is a hash,可在 Rails 测试中访问,包含此时可用于视图的所有 实例变量。它也是一个访问器,允许您使用符号查找属性(因为从历史上看,分配哈希的键都是字符串)。换句话说,assigns(:contact)
与 assigns["contact"]
相同。
请注意,在您链接到的答案中,assigns[]
中的符号与控制器操作中实例变量的符号相匹配。
在您的情况下,您正在分配实例变量 @users_grid
但试图遍历 assigns[:users]
。您可能只想将后者更改为 assigns[:users_grid]
我正尝试按照 上的建议编写测试。
我的简化测试:
test "test" do
log_in_as(@user)
get users_path
assert_template 'users/index'
assigns[:users].each do
assert_select 'a[href=?]', users_path(user)
end
end
错误结果:
NoMethodError: undefined method `each' for nil:NilClass
控制器方法:
def index
@users_grid = initialize_grid(User.where(verified: true),
per_page: 15,
order: 'users.username',
order_direction: 'desc')
end
显然 assigns[:users]
是空的,即使在 fixtures 文件中有用户。我究竟做错了什么?我知道 assigns[:users]
应该分配与 users/index
上显示的完全相同的用户,这正是我想要的。
嗯,您的正确代码是:
test "test" do
log_in_as(@user)
get users_path
assert_template 'users/index'
# in your controller you have the instance var as
# @users_gird, not @users.
assigns[:users_grid].each do
assert_select 'a[href=?]', users_path(@user)
end
end
assigns
is a hash,可在 Rails 测试中访问,包含此时可用于视图的所有 实例变量。它也是一个访问器,允许您使用符号查找属性(因为从历史上看,分配哈希的键都是字符串)。换句话说,assigns(:contact)
与 assigns["contact"]
相同。
请注意,在您链接到的答案中,assigns[]
中的符号与控制器操作中实例变量的符号相匹配。
在您的情况下,您正在分配实例变量 @users_grid
但试图遍历 assigns[:users]
。您可能只想将后者更改为 assigns[:users_grid]