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