可以设计sign_in()测试助手接受new_record吗?

时间:2011-09-25 22:02:52

标签: ruby-on-rails devise

在以下示例中,我可以使用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()是可以的。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

根据José的说明,看起来必须保留用户记录。

  

模拟永远不会起作用。当您说登录时,用户是   存储在会话中(基本上,用户类及其id)。当你   访问控制器,基于此检索另一个用户对象   存储的数据。解决问题的最佳方法是使用某些东西   坚持这个对象,就像Factory Girl一样。

https://github.com/plataformatec/devise/issues/928