在以下示例中,我可以使用build()
代替create()
吗?
class UsersControllerTest < ActionController::TestCase
setup do
@user = Factory.create(:user)
end
test "admin can get index" do
sign_in @user
get :index
assert_response :success
end
test "user cannot get index" do
sign_in @user
get :index
assert_response 403
end
end
在实际使用中,用户在登录前已经创建(保存),这就是我的测试使用create()
的原因。但是,我想使用build()
,因为我希望它能让我的测试更快。
设计README没有明确表示使用build()是可以的。
提前感谢您的帮助。
答案 0 :(得分:1)
根据José的说明,看起来必须保留用户记录。
模拟永远不会起作用。当您说登录时,用户是 存储在会话中(基本上,用户类及其id)。当你 访问控制器,基于此检索另一个用户对象 存储的数据。解决问题的最佳方法是使用某些东西 坚持这个对象,就像Factory Girl一样。