【问题标题】:testing padrino post methods are stopped by csrf测试 padrino post 方法被 csrf 停止
【发布时间】:2014-12-21 05:43:03
【问题描述】:

我有一个带有一个 post 方法和一个 get 方法的 padrino 控制器。我可以使用 rack-test 来测试 get 方法而不是 post 方法。当我测试请求时返回 403。我认为这是因为 padrino 内置了 csrf 保护,因为当我用set :protect_from_csrf, true 注释掉该行时,我可以测试发布路线。显然我不想注释掉这一行,因为 csrf 很有用。我怎样才能获得临时访问权限来测试这些路由以进行测试?

控制器

SailPowerCourses::Admin.controllers :owners do

  get :index do
    puts 'hello'
  end

  post :index do
    puts params
  end

end

测试

class OwnersControllerTest < MiniTest::Test

  def setup
    app SailPowerCourses::Admin
  end

  def test_creates_an_owner
    email = 'test@example.com'
    assert_empty Owner
    post '/owners', owner: {email: email}
    puts last_response.status
    refute_empty Owner

  end

  def test_other
    email = 'test@example.com'
    get '/owners', owner: {email: email}
  end
end

```

【问题讨论】:

    标签: ruby sinatra minitest padrino rack-test


    【解决方案1】:

    在 minitest 中设置应用时,您可以使用块来访问和更改设置。比如csrf保护。我发现最好的解决方案如下。在 test_config.rb 中,我设置了一个关闭 csrf 保护的应用版本。

    class OwnersControllerTest < MiniTest::Test
    
      def setup
        app SailPowerCourses::Admin do
          set :protect_from_csrf, false
        end
      end
    
      def test_creates_an_owner
        email = 'test@example.com'
        assert_empty Owner
        post '/owners', owner: {email: email}
        puts last_response.status
        refute_empty Owner
    
      end
    
      def test_other
        email = 'test@example.com'
        get '/owners', owner: {email: email}
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-05
      • 2014-06-01
      • 2020-11-19
      • 2022-11-12
      • 1970-01-01
      • 1970-01-01
      • 2018-11-06
      相关资源
      最近更新 更多