Testing HTTP Basic Auth in Rails 2.2+

后端 未结 1 1933
轮回少年
轮回少年 2020-12-17 17:00

As part of an API I am building, there is a user authentication method which upon success, returns a payload of useful user information, API token, etc.

In writing f

相关标签:
1条回答
  • 2020-12-17 17:21

    I'm not sure if this helps, but I just made one of these tests in my own application, except I'm using Rails 2.3.2.

    In my case, the pitfall was that I had forgotten to put in the fixtures for users, so the crypted_password didn't match (why it had any value at all is still a mystery to me... I guess Rails didn't clean the test database before running the test?)

    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
    
    0 讨论(0)
提交回复
热议问题