使用Authlogic测试通过“autotest”而不是“rake测试”

问题描述:

我的测试在执行“rake测试:函数”时失败,但它们使用自动测试持续传递。使用Authlogic测试通过“autotest”而不是“rake测试”

有问题的失败测试似乎与Authlogic在使用rake时没有正确登录用户有关。

为了便于在测试用户签约,我有一个测试辅助方法如下:

class ActionController::TestCase 
    def signin(user, role = nil) 
    activate_authlogic 
    UserSession.create(user) 
    user.has_role!(role) if role 
    end 
end 

上述方法用于签到用户

我的堆栈是早该/ authlogic/acl9/factory_girl /摩卡

为什么我怀疑Authlogic是这个问题是测试失败的原因是这样的:

 54) Failure: 
test: A logged in user PUT :update with valid data should redirect to user profile. (UsersControllerTest) 
    [/var/lib/gems/1.8/gems/thoughtbot-shoulda-2.10.2/lib/shoulda/action_controller/macros.rb:202:in `__bind_1251895098_871629' 
    /var/lib/gems/1.8/gems/thoughtbot-shoulda-2.10.2/lib/shoulda/context.rb:351:in `call' 
    /var/lib/gems/1.8/gems/thoughtbot-shoulda-2.10.2/lib/shoulda/context.rb:351:in `test: A logged in user PUT :update with valid data should redirect to user profile. ']: 
Expected response to be a redirect to <http://test.host/users/92> but was a redirect to <http://test.host/signin>. 

55) Failure: 
test: A logged in user PUT :update with valid data should set the flash to /updated successfully/i. (UsersControllerTest) 
    [/var/lib/gems/1.8/gems/thoughtbot-shoulda-2.10.2/lib/shoulda/assertions.rb:55:in `assert_accepts' 
    /var/lib/gems/1.8/gems/thoughtbot-shoulda-2.10.2/lib/shoulda/action_controller/macros.rb:41:in `__bind_1251895098_935749' 
    /var/lib/gems/1.8/gems/thoughtbot-shoulda-2.10.2/lib/shoulda/context.rb:351:in `call' 
    /var/lib/gems/1.8/gems/thoughtbot-shoulda-2.10.2/lib/shoulda/context.rb:351:in `test: A logged in user PUT :update with valid data should set the flash to /updated successfully/i. ']: 
Expected the flash to be set to /updated successfully/i, but was {:error=>"You must be signed in to access this page"} 

我不确定你的问题在哪里,但我建议你使用Cucumber来测试控制器和用户交互,而不是单元测试/ rspec。这是因为你运用了你的整个应用程序,包括你拥有的认证和授权代码。

自动测试读取所有测试文件的前面AFAIR(它与RSpec这样做,我长时间没有使用普通测试,所以我可能是错的)。

要正确测试控制器,您需要在setUp方法中调用activate_authlogic。这可能会自动(全局)完成集成测试。

由于自动测试读取所有测试,它会运行此全局设置和功能测试。当您仅运行功能测试时,authlogic未启用且您的测试失败。

显然用户没有登录。看起来像布拉吉拉格纳森可能会对某事。

这里有一些其他的事情来隔离问题:

  • 理解如果测试是不完整的或依赖于自动测试的一些副作用。通过自身运行测试:

    红宝石测试/函/ users_controllers_test.rb

  • 想必这是行不通的。如果没有,那么有一些全局代码会被自动测试调用进行非功能性测试。这可能是测试/集成或测试/单元目录中的代码设置,或者它们需要的地方之一。