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 関数でテストが通りません。revel -csrfを実装した csrf ミドルウェアを介してリクエストが拒否されたようです。上記のように、csrf トークンを読み取り、変数 (csrf) に保存します。Postform リクエストで変数を渡しましたが、機能しません。
私の質問は、csrf 保護を通過するポスト リクエストでテストを作成する方法です。