Вызов Query with args [], не ожидался в go-sqlmock для составных запросов SQL - PullRequest
0 голосов
/ 28 сентября 2019

Мне удалось успешно смоделировать запрос для выбора из одной таблицы, например, так:

sqlMock.ExpectQuery("^SELECT DISTINCT (.+) FROM myTable1, myTable2").
        WillReturnRows(myResultRows)

Но я не смог смоделировать следующий запрос, который проверяет наличие таблицы в моей postgres db:

SELECT EXISTS
        ( SELECT 1
        FROM information_schema.tables
        WHERE table_schema = 'public'
           AND table_name = 'myTable3' );

Комбинация:

    existsRows := sqlmock.NewRows([]string{"exists"}).
        AddRow(true)

И

    slMock.ExpectQuery("^SELECT EXISTS").
        WillReturnRows(existsRows)

Я тоже пытался насмехаться SELECT 1, но получаю точно такую ​​же ошибку:

time="2019-09-27T15:49:41-07:00" level=panic msg="db query" error="call to Query 'SELECT EXISTS\n\t\t( SELECT 1\n\t\tFROM information_schema.tables\n\t\tWHERE table_schema = 'public'\n\t\t   AND table_name = 'myTable3' );' with args [], was not expected, next expectation is: ExpectedExec => expecting Exec or ExecContext which......

Пакеты, которые я использую:

import (
    "database/sql"
    "db"
    "os"
    "testing"

    // not explicitly called
    _ "github.com/denisenkom/go-mssqldb"
    _ "github.com/lib/pq"

    "github.com/DATA-DOG/go-sqlmock"
    "github.com/sirupsen/logrus"
)

Любые идеи или указатели приветствуются.Я не могу найти соответствующие примеры в интернете

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

На самом деле,


    sqlMock.ExpectQuery("SELECT EXISTS \\( SELECT 1 FROM information_schema\\.tables WHERE table_schema = 'public' AND table_name = 'myTable3' \\);").
        WillReturnRows(existsRows)

сделал свое дело.

Больше примеров здесь: https://chromium.googlesource.com/external/github.com/DATA-DOG/go-sqlmock/+/e36ad8d068217ee8e4df50408476b153e115e3e6/README.md

Я также использовал regex101.com

ключ был в том, что он ожидал следующего запроса сразу.Таким образом, мы знали, что это не читало это вообще.Мой коллега указал на это:)

0 голосов
/ 28 сентября 2019

Я не уверен, но думаю, что проблема в вашем отступе от вашего запроса, попробуйте удалить разрыв строки или табуляцию в вашем запросе SELECT EXISTS ( SELECT 1 FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'myTable3' );

Как это SELECT EXISTS( SELECT 1 FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'myTable3' );

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...