回答編集履歴

1

#2 TestUpdateUser() との比較から

2023/09/22 04:02

投稿

ikedas
ikedas

スコア4443

test CHANGED
@@ -1,6 +1,5 @@
1
- まだ若干情報不足であるため暫定的な回答となることを了承ください。
1
+ ## \#1
2
2
 
3
- ---
4
3
  ご質問のエラーと同じと思われる報告が上がっています:
5
4
  * [GitHub: DATA-DOG/go-sqlmock#118](https://github.com/DATA-DOG/go-sqlmock/issues/118)
6
5
 
@@ -8,3 +7,20 @@
8
7
 
9
8
  現在ご提示のコードには`UPDATE`文の実行 (`Update()`) しか見当たりませんが、ユーザリポジトリを作成する際に`INSERT`文の実行 (`Save()`や`Create()`) が行われているのではないかと考えます。
10
9
 
10
+ ## \#2
11
+
12
+ `TestUpdateUser()`は期待通り動作しているとのことですが、
13
+ ```
14
+ func TestUpdateUser(t *testing.T) {
15
+ ...
16
+ mock.ExpectBegin()
17
+ mock.ExpectQuery(regexp.QuoteMeta(`UPDATE "users" SET "email"=$1,"img_path"=$2,"updated_at"=$3 WHERE id=$4 AND "users"."deleted_at" IS NULL AND "id" = $5 RETURNING *`)).
18
+ WithArgs(user.Email, user.ImgPath, AnyTime{}, user.ID, user.ID).
19
+ WillReturnRows(sqlmock.NewRows([]string{"email"}).AddRow(user.Email))
20
+ mock.ExpectCommit()
21
+ ...
22
+ ```
23
+ となっており、`UPDATE`文に対して`ExpectQuery()`を用いておられます。
24
+
25
+ ということで、\#1で述べたことは`INSERT`文だけでなく`UPDATE`文にもあてはまるのではないでしょうか。つまり、問題の箇所でも`ExpectExec()`の代わりに`ExpectQuery()`を使えば問題は解消するように思われます。
26
+