2011-05-18 157 views
0

我一直在为此奋斗了两天,似乎没有太多的在线帮助。我查看了Typus wiki,示例应用程序和测试,我似乎正在做的事情,但我仍然得到HTTP状态码302(重定向),我期望在我的测试中200(成功)。测试Rails控制器继承Typus

下面是什么应该是适当的文件(除去无关紧要的东西)

配置/初始化/ typus.rb(轨摹typus:迁移已运行,因为我有一个admin_users表):

Typus.setup do |config| 

    # Application name. 
    config.admin_title = "Something" 
    # config.admin_sub_title = "" 

    # When mailer_sender is set, password recover is enabled. This email 
    # address will be used in Admin::Mailer. 
    config.mailer_sender = "[email protected]" 

    # Define paperclip attachment styles. 
    # config.file_preview = :medium 
    # config.file_thumbnail = :thumb 

    # Authentication: +:none+, +:http_basic+ 
    # Run `rails g typus:migration` if you need an advanced authentication system. 
    config.authentication = :session 

    # Define user_class_name. 
    config.user_class_name = "AdminUser" 

    # Define user_fk. 
    config.user_fk = "admin_user_id" 

    # Define master_role. 
    config.master_role = "admin" 
end 

的config/typus/admin_user.yml

AdminUser: 
    fields: 
    default: first_name, last_name, role, email, locale 
    list: email, role, status 
    form: first_name, last_name, role, email, password, password_confirmation, locale 
    options: 
     selectors: role, locale 
     booleans: 
     status: Active, Inactive 
    filters: status, role 
    search: first_name, last_name, email 
    application: Admin 
    description: Users Administration 

测试/工厂/ admin_users.rb:

Factory.define :admin_user do |u| 
    u.first_name 'Admin' 
    u.last_name 'User' 
    u.email '[email protected]' 
    u.role 'admin' 
    u.password 'password!' 
    u.token '1A2B3C4D5E6F' 
    u.status true 
    u.locale 'en' 
end 

测试/功能/管理/ credits_controller_test.rb:

require 'test_helper' 

class Admin::CreditsControllerTest < ActionController::TestCase 
    setup do 
    @admin_user = Factory(:admin_user) 
    @request.session[:admin_user_id] = @admin_user.id 
    @request.env['HTTP_REFERER'] = '/admin/credits/new' 
    end 

    context "new" do 
    should "be successful" do 
     get :new 
     assert_response :success 
    end 
    end 
end 

@ response.body:

<html> 
    <body>You are being <a href="http://test.host/admin/session/new?back_to=%2Fadmin%2Fcredits%2Fnew">redirected</a>. 
    </body> 
</html> 

正如你所看到的,我已经建立了使用admin_user的typus和会话密钥的admin_user_id。但由于某种原因,测试失败的是302而不是200.我确定这是因为我做了一些我只是看不到的错误。我还创建了所有这些gist,以防万一有人喜欢。

编辑2011-05-19 09:58 am中央时间:为每个请求添加了响应正文文本。

+0

这与Typus并无关系,我可以说,它似乎只与您使用的auth机制有关。我看到你正试图提供一个包含管理员用户标识的cookie,但这看起来不太合适。 – 2011-05-19 15:03:15

+0

默认情况下,Rails会话存储使用cookie存储,所以你会打开自己的篡改。无论您使用哪种身份验证机制,都应提供各种加密的令牌。 – 2011-05-19 15:07:00

+0

@BenScheirman,是的,我真的不喜欢这样做,但它是如何在他们的测试应用程序中执行他们自己的测试,[见这里的例子](https://github.com/fesplugas/typus/斑点/主/测试/应用程序/控制器/管理/ assets_controller_test.rb)。 – Koby 2011-05-19 15:39:02

回答

0

我想通了。这是config/typus/admin_roles.yml文件的问题。

前:

admin: 
    Category: create, read, update 
    Credit: read 
    ... 

后:

admin: 
    Category: create, read, update 
    Credit: read, create 
    ... 

问题是,管理员用户没有访问对管理员/ credits_controller创建动作导致用户被送回到管理员登录地址。

从而为管理用户访问行为和改变

@session[:admin_user_id] 

@session[:typus_user_id] #Just like in the Typus docs 

解决了这个问题。我已经把它改为:admin_user_id因为

config.user_fk = "admin_user_id" 
在typus配置文件

,试图解决此问题。