LoginSignup
1
0

More than 1 year has passed since last update.

Go(Gin)でfrom-dataをPOSTするテストを書く

Posted at

はじめに

最近GoのPOSTに関する記事を挙げていました。
やっと初めて作成したAPIがテスト段階に移り、POSTのテストを書いていたのですがテストでPOSTにどのようにデータを渡すのかに時間をとられたのでまとめます

問題

今回はフォームデータをPOSTするテストを書いていました
以下のようなコードを書いたのですが、ginでc.paramsで値を取得しても値がありませんでした
bodyで渡していたのでそれをform-dataで送る必要がありました

controller_test.go
jsonBody := []byte(`{"content":"hoge","done":false}`)
req, _ := http.NewRequest("POST", "/task", bytes.NewBuffer(jsonBody))

解決方法

以下のようにform-dataを作成してPOSTすることでうまくいきました

controller_test.go
(省略)
    form := url.Values{}
	form.Add("email", email)
	form.Add("password", pass)
	body := strings.NewReader(form.Encode())

	w := httptest.NewRecorder()
	req, _ := http.NewRequest(http.MethodPost, "/api/test/signup", body)
	req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
	r.ServeHTTP(w, req)
    assert.Equal(t, http.StatusOK, w.Code)

またポイントとしては

req.Header.Set("Content-Type", "application/x-www-form-urlencoded")

を追加しないとエラーが出てしまうというところでした

おわりに

いままであまり意識していませんでしたが、データの送り方も大事です
そしてtestifyが便利だなととても思いました

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0