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
}

0 ответов

Другие вопросы по тегам