我有一个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
```
答案 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