sqlmock с возвращением GORM пустым
Макетная часть, похоже, работает, но, насколько я понимаю, мой метод GetCave должен возвращать строку, которую я добавил в макетную часть? Это реализация GRPC, и я использую buffconn в модульном тесте.
Я получаю следующую ошибку:
(cave.go:19)
[2020-05-17 17:00:48] [0.10ms] SELECT * FROM "caves" WHERE "caves"."deleted_at" IS NULL AND ((title = 'Test Cave')) ORDER BY "caves"."id" ASC LIMIT 1
[1 rows affected or returned ]
&{{0 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC <nil>} 0 0}
✔✘
Failures:
* /pkg/api/executor_test.go
Line 218:
Expected: 'Test Cave'
Actual: ''
(Should be equal)
goroutine 99 [running]:
Это мой тест
Convey("Returns cave if title is set and exists", func() {
request := GetCaveRequest{Title: "Test Cave"}
caveRow := sqlmock.NewRows([]string{"Title", "CountryName", "RegionName", "Latitude", "Longitude"}).
AddRow("Test Cave", "CH", "Zurich", 0, 0)
mock.ExpectQuery(regexp.QuoteMeta(`SELECT * FROM "caves" WHERE "caves"."deleted_at" IS NULL AND ((title = $1)) ORDER BY "caves"."id" ASC LIMIT 1`)).
WithArgs(request.Title).
WillReturnRows(caveRow)
ret, err := client.GetCave(ctx, &request)
So(err, ShouldBeNil)
So(ret.Cave.Title, ShouldEqual, request.Title)
})
Моя настоящая функция GetCave
func (e *apiExecutor) GetCave(ctx context.Context, request *GetCaveRequest) (*GetCaveReply, error) {
if request.Title == "" {
return nil, status.Errorf(codes.InvalidArgument, "Cave title is empty")
}
// check if the cave is existed
cave, err := e.handler.FindCaveByUK(request.Title)
if err != nil {
return nil, status.Errorf(codes.Internal, "Find cave: %v", err)
}
if cave == nil {
return nil, status.Errorf(codes.NotFound, "Cave does not exist")
}
fmt.Println(cave)
return &GetCaveReply{
Cave: &Cave{
Title: cave.Title,
CountryName: cave.CountryName,
RegionName: cave.RegionName,
Longitude: cave.Longitude,
Latitude: cave.Latitude,
},
}, nil
}