2
我正试图编写一个测试方法来注册我的娱乐应用程序。请看下面的代码用csrf测试发布方法
package tests
import "github.com/revel/revel"
import "github.com/PuerkitoBio/goquery"
import "bytes"
import "net/url"
//import "net/http"
var csrf string
type AccountTest struct {
revel.TestSuite
}
func (self *AccountTest) Before() {
//println("Set up")
}
func (self *AccountTest) TestGetSignUp() {
self.Get("/signup")
site := bytes.NewBuffer(self.ResponseBody)
doc, _ := goquery.NewDocumentFromReader(site)
doc.Find("input").Each(func(i int, s *goquery.Selection) {
name, exists := s.Attr("name")
if name == "csrf_token" && exists {
csrf, _ = s.Attr("value")
}
})
self.AssertOk()
self.AssertContains("Sign Up")
self.AssertContentType("text/html; charset=utf-8")
}
func (self *AccountTest) TestPostSignUp() {
self.PostForm("/signup", url.Values{
"name": {"cormier"},
"email": {"cormisample.com"},
"emailConfirm": {"[email protected]"},
"password": {"Test!1234"},
"termof": {"true"},
"csrf_token": {csrf},
})
self.AssertOk()
self.AssertContentType("text/html; charset=utf-8")
}
func (self *AccountTest) After() {
//println("Tear down")
}
测试不通过TestPostSignUp函数传递,好像,该请求是通过CSRF中间件,我实现revel-csrf拒绝。正如你在上面看到的,我读取了csrf标记并保存到变量(csrf)中。通过Postform请求我传递了变量,但不起作用。
我的问题是,如何做一个测试,通过csrf保护的post请求。
这将会是巨大的,如果你能为我们提供新的内置功能CSRF一些反馈:https://github.com/revel/revel/blob /master/modules/csrf/app/csrf_test.go – Brenden 2014-10-30 00:03:18