ruby-on-rails – 测试Rails中的HTTP基本验证2.2

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 测试Rails中的HTTP基本验证2.2前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
作为我正在构建的API的一部分,有一种用户认证方法,成功后,返回有用的用户信息,API令牌等的有效载荷.

在编写处理这个的控制器的功能测试时,我正在运行一个测试HTTP Basic认证的问题;我发现许多博客提到以下代码应该用于欺骗头来进行身份验证尝试:

@request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials(email,pass)

问题是这没有效果; authenticate_with_http_basic没有看到标题,因此即使存在有效的凭据也返回false.

我错过了什么吗?

请注意,如果应用程序在回答中很有用,则该应用程序将冻结到Rails 2.2.2.

解决方法

我不知道这是否有帮助,但我只是在自己的应用程序中进行了其中一个测试,除了我使用的是Rails 2.3.2.

在我的情况下,这个陷阱是我已经忘记为用户安装了固定装置,所以crypted_pa​​ssword不匹配(为什么它有任何价值对我来说依然是一个谜…我猜Rails没有清理测试数据库运行前的测试?)

class DonglesControllerTest < ActionController::TestCase
  fixtures :users

  test "index api" do
    @request.env['HTTP_AUTHORIZATION'] = encode_credentials('one','one')

    get(:index,{ :name_contains => 'XXXX0001',:format => 'json' })

    assert_equal 'application/json',@response.content_type
    dongles = ActiveResource::Formats::JsonFormat.decode(@response.body)

    expected_dongles = [
      { 'id' => 1,'name' => 'XXXX0001','key_id' => 'usbstor\disk&ven_flash&prod_drive_sm_usb20&rev_1100\0000000000000000&0' }
    ]

    assert_equal expected_dongles,dongles
  end

  private

  # verbatim,from ActiveController's own unit tests
  def encode_credentials(username,password)
    "Basic #{ActiveSupport::Base64.encode64("#{username}:#{password}")}"
  end
end

猜你在找的Ruby相关文章