我正在尝试编写一个测试方法来注册我的 revel 应用程序。看下面的代码
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": {"cormier@sample.com"},
"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 保护的发布请求进行测试。