测试padrino post方法由csrf停止

时间:2014-10-25 15:21:08

标签: ruby sinatra minitest padrino rack-test

我有一个padrino控制器,它有一个post方法和一个get方法。我可以使用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

```

1 个答案:

答案 0 :(得分:2)

在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