3

我有一个带有单个 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

```

4

1 回答 1

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
于 2014-11-30T20:50:00.660 回答