mysqld を使ったテストの際に test database がなくてハマった
go で perl でいう test::mysqld のようにテスト用の mysqld プロセスを立てるには github.com/lestrrat/go-test-mysqld を使っている。
しかし、手元だと走るテストが wercker で実行すると test database がないと言われてどうしたものかと思ったら
こういうことらしく test という名前の database が作られなくなっていた。なので
func TestHoge(t *testing.T) { mysqld, err := mysqltest.NewMysqld(nil) if err != nil { t.Fatal(err) } defer mysqld.Stop() db, err := sql.Open("mysql", fmt.Sprintf("root:@%s/", mysqld.ConnectString(0))) if err != nil { t.Fatal(err) } defer db.Close() if _, err := db.Exec("CREATE DATABASE IF NOT EXISTS `test`"); err != nil { t.Fatal(err) } if _, err := db.Exec("USE `test`"); err != nil { t.Fatal(err) } .....
こういう感じで database 名を指定せずにつないで test という名前の database を作るようにした。