ruby-on-rails - 使用 Rails 和 Devise 进行功能测试。在我的固定装置中放什么?

标签 ruby-on-rails devise functional-testing fixtures

嗨,我想对使用 Devise 和 CanCan 的 Rails 3 应用程序进行一些功能测试。

在我的用户模型中,我有用户年龄,我想测试用户是否只能访问特定页面,如果他们是:

  • 登录
  • 超过 35

  • 我在 Devise 文档中看到我可以使用: *sign_in* 并且我已经把它放在我的测试中并且它似乎工作 - 测试没有错误,因为我有:
    include Devise::TestHelpers
    

    在我的 *test_helper.rb*

    当我取出它时,我的测试会出错,因为 *sign_in* 未定义。所以这不是一个 helper 问题。

    当我运行测试并检查 span#loggedin 是否出现一次时,测试失败,因为出现了 0 次。 span#loggedin 仅出现 *if user_signed_in?*

    我需要在我的装置或测试中添加什么来创建一个也是完全注册用户(已确认等)的测试用户?

    查看代码:
    <% if user_signed_in? %>
         <span id="loggedin">User is signed in</span>
         User age is <span id="age"><%= current_user.age.to_s %></span>
    <% end %>
    

    测试代码:
    test "should get index" do
        sign_in :one
        get :index
        assert_response :success
        assert_select 'span#loggedin', :count => 1
    end
    

    夹具:
    one:
     email: jez@example.com
     age: 36
    

    当我手动登录时,它在开发中工作正常,但我希望将其全部自动化 - 真正的测试点!!

    最佳答案

    Devise 3.2.0 之前的解决方案

    我认为这可能是您正在寻找的内容:

    User.new.send(:password_digest, 'password')
    

    当盐为零时它起作用。

    因此在你的装置中你可以这样做:
    one:
      email: 'some@user.com'
      encrypted_password: <%= User.new.send(:password_digest, 'password') %>
    

    Devise 版本 3.2.0 到 3.5.0 的解决方案

    在 Devise 3.2.0 中,一个 method was created precisely for this purpose (@Inkling 更新)。对于这些版本,encrypted_pa​​ssword 应该像这样定义:
    encrypted_password: <%= Devise.bcrypt(User, 'password') %>
    

    哪里User是您的用户模型的类。

    请注意,这仅适用于使用默认加密算法 (bcrypt) 的情况。

    Devise 3.5.1 及以上版本的解决方案

    Katarzyna已指出:Device.bcrypt has been deprecated在 3.5.1 版本中。从那个版本开始,encrypted_pa​​ssword 应该像这样定义:
    encrypted_password: <%= Devise::Encryptor.digest(User, 'password') %>
    

    关于ruby-on-rails - 使用 Rails 和 Devise 进行功能测试。在我的固定装置中放什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4577737/

    相关文章:

    ruby-on-rails - 设计......用户模型的附加列未验证

    java - 为另一个 Web 服务编写测试用例

    ruby-on-rails - 在 chrome 中通过 Ruby on Rails 播放 MP3

    ruby-on-rails - Rails 与 websockets : Triggering a controller method on model changes

    ssl - Rails 3.2.11 SSL 配置

    ruby-on-rails - 允许多个模型访问一个 Controller

    javascript - 在 Rails 中,您如何对 Javascript 响应格式进行功能测试?

    Symfony2 测试 : Why should I use fixtures instead of managing data directly in test?

    ruby-on-rails - 如何使用delay_job使Rails 3.0 ActionMailer异步运行?遇到ArgumentErrors

    ruby-on-rails - 如何使用 rmagick 将动态文本附加到图像?