1

I'm using sqlmock to unit test a set of Mysql database query handlers written in Go. This works great for standard SELECT / INSERT queries. For our db healthcheck, I'm using GORM's DB.Migrator().HasTable() to make sure a particular table exists in our db. The functionality seems to be working properly, but I'm having difficulty mocking the query that's happening under the hood of HasTable(). Does anybody have any advice on how to use sqlmock to do this?

HasTable() is executing the following query: SELECT count(*) FROM information_schema.tables WHERE table_schema = '' AND table_name = '[table_name]' AND table_type = 'BASE TABLE'

My helper function for the test looks like this:

    sqlDB, mock, err := sqlmock.New()
    if err != nil {
        log.Panicln(err)
    }

    // This is the block I'm not sure about...
    mock.ExpectBegin()
    mock.ExpectQuery(regexp.QuoteMeta("SELECT count(*) FROM information_schema.tables WHERE table_schema = '' AND table_name = '[table_name]' AND table_type = 'BASE TABLE'")).
        WillReturnRows(sqlmock.NewRows([]string{"count(*)"}).
            AddRow(1))
    mock.ExpectCommit()

    setupSqlMock(sqlDB)
}

I've tried every combination of mock.ExpectExec(), mock.ExpectQuery(), and all of their methods that I can think of. Any ideas?

Orion
  • 11
  • 3

1 Answers1

-1

Using sqlmock.QueryMatcherEqual you avoid the * parsing problem

sqlDB, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
codetiger
  • 2,650
  • 20
  • 37