У меня есть функция для создания пользователя, который работает правильно. Теперь мне нужно смоделировать Prepare and SaveUser
функцию внутри CreateUser
. Но это CreateUser
требует json данных в качестве параметра запроса. Ниже моя CreateUser
функция.
func (server *Server) CreateUser(c *gin.Context) {
errList = map[string]string{}
user := models.User{}
if err := c.ShouldBindJSON(&user); err != nil {
log.Println(err)
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) **//every time return from here with error -> invalid request**
return
}
user.Prepare()
userCreated, err := sqlstore.SaveUser(&user)
if err != nil {
formattedError := formaterror.FormatError(err.Error())
errList = formattedError
c.JSON(http.StatusInternalServerError, gin.H{
"status": http.StatusInternalServerError,
"error": errList,
})
return
}
c.JSON(http.StatusCreated, gin.H{
"status": http.StatusCreated,
"response": userCreated,
})
}
Это обязательные данные json в качестве параметра запроса для созданного выше пользователя. Я хочу передать ниже данные во время насмешки.
{"firstname":"test","email":"test@test.com"}
Ниже приведен пример проверки над созданием пользовательской функции.
type UserMock struct {
mock.Mock
}
func (u *UserMock) Prepare() (string, error) {
args := u.Called()
return args.String(0), args.Error(1)
}
func (u *UserMock) SaveUser() (string, error) {
args := u.Called()
return args.String(0), args.Error(1)
}
func TestCreateUser(t *testing.T) {
gin.SetMode(gin.TestMode)
w := httptest.NewRecorder()
c, _ := gin.CreateTestContext(w)
**//how to json data as request parameter**
uMock := UserMock{}
uMock.On("Prepare").Return("mocktest", nil)
server := Server{}
server.CreateUser(c)
if w.Code != 201 {
t.Error("Unexpected status code found : ",w.Code)
}
}
Заранее спасибо.