代码之家  ›  专栏  ›  技术社区  ›  Aaron

Mocks不能与RSpec和designe一起工作

  •  3
  • Aaron  · 技术社区  · 14 年前

    我目前正在使用RSpec 2开发一个Rails 3 web应用程序,我们使用devide进行身份验证。我们的一个(很快就会有很多)控制器要求用户登录。我知道设计提供了 sign_in 测试助手,但它可以与RSpec或Mocha mock对象一起使用吗?

    我最初试过 @user = mock_model(User) 其中用户是设计类。这样不行 sign_in :user, @user 作为 get 'index' 将重定向到登录表单。

    有没有人有任何经验测试的设计和可以帮助?

    5 回复  |  直到 14 年前
        1
  •  5
  •   Nick Boyce    14 年前

    我们也遇到过类似的问题,但用的是工厂女工。我们是这样解决的:

    在spec_helper.rb中:

    config.include Devise::TestHelpers, :type => :controller
    

    在控制器规范中(只是一个包装器方法):

    def login_user(user)
        sign_in user
    end
    

    然后,在您需要的每种方法中,您可以执行以下操作:

    login_user(Factory(:user))
    

    ... 在factories.rb中定义用户对象的位置。但不确定这是否适用于mocks。

        2
  •  2
  •   José Valim    14 年前

    模仿是行不通的。当您说sign-in时,用户存储在session中(基本上是用户类及其id)。访问控制器时,将根据存储的数据检索另一个用户对象。解决这个问题的最好方法是使用一些可以持久化对象的东西,比如工厂女工。

        3
  •  1
  •   mbreining    14 年前

    我碰到了同样的问题。我现在正在做以下工作:

    before(:each) do
      # sign_in mock_user
      request.env['warden'] = mock(Warden, :authenticate => mock_user,
                                           :authenticate! => mock_user)
    end
    
        4
  •  0
  •   Mattias Petter Johansson    14 年前

    我在这里创建了一个问题: https://github.com/plataformatec/devise/issues#issue/928 去投票吧!

        5
  •  0
  •   airy    14 年前

    它们都不适合我(MRI 1.9.3-preview1,rails 3.0.1.rc5)。

    这就是我找到的解决方案: http://blog.joshmcarthur.com/post/6407481655/integration-tests-with-devise-and-rspec