前提・実現したいこと
GolangのGinフレームワークのテストを書いているのですが、テストで送ったデータをC.PostFormで受け取ることができません。解決策が分かる方、ご教示下さると助かります。
###現状
下記のコードだと、controllerのSignup関数の中にある、
C.PostForm("email")
c.PostForm("name")
c.PostForm("password")
で、送ったデータを取得することができませんでした。
”全ての情報を入力してください(All information should be filled in.)”という、Signup関数内のエラーが返って来るので、ルーターなどの問題ではないと思います。
該当のソースコード
test
1func InitTestUserCreate(body map[string]interface{}) *httptest.ResponseRecorder { 2 r := gin.Default() 3 app := new(apps.Application) 4 app.CreateTest(r) 5 6 w := httptest.NewRecorder() 7 b, _ := json.Marshal(body) 8 req, _ := http.NewRequest(http.MethodPost, "/api/test/signup", strings.NewReader(string(b))) 9 req.Header.Set("Content-Type", "application/json") 10 r.ServeHTTP(w, req) 11 return w 12} 13 14func TestUserCreate(t *testing.T) { 15 t.Run("it should return success", func(t *testing.T) { 16 defer database.DropAllTable() 17 body := map[string]interface{}{ 18 "name": "User Test", 19 "email": "user@email.com", 20 "password": "password", 21 } 22 w := InitTestUserCreate(body) 23 t.Log(w) 24 assert.Equal(t, http.StatusOK, w.Code) 25 }) 26}
controller
1func (uc *UserController) Signup(c *gin.Context) { 2 var user entity.User 3 email := c.PostForm("email") 4 name := c.PostForm("name") 5 pass := c.PostForm("password") 6// ↑ここで、テストから送られたデータを受け取りたい... 7 if name == "" || email == "" || pass == "" { 8 res := response.BadRequest("全ての情報を入力してください(All information should be filled in.)") 9 c.JSON(res.Status, res) 10 } else { 11 if _, err := uc.Repository.FindByEmail(email); err == nil { 12 res := response.Conflict("このメールアドレスは既に登録されています(This e-mail has already been registered)") 13 c.JSON(res.Status, res) 14 } else { 15 passwordEncrypt, _ := middleware.PasswordEncrypt(pass) 16 user = entity.User{ 17 Name: name, 18 Email: email, 19 Password: passwordEncrypt, 20 } 21 if err := uc.Repository.Create(&user); err != nil { 22 res := response.BadRequest("予期せぬエラーが発生しました(An unexpected error has occured)") 23 c.JSON(res.Status, res) 24 } else { 25 userID := user.ID 26 middleware.Login(c, userID) 27 res := response.SuccessResponse("") 28 c.JSON(res.Status, res) 29 } 30 } 31 } 32} 33
質問に不備があれば、再掲させていただきます。
ご回答の程、宜しくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/18 03:15
2021/02/18 04:14
2021/02/18 04:49