GOのテストフレームワークtestifyの使い方
便利なassertion EqualValues 中身の値が同じことを検証できる named typeでそのままで比較ができずに、キャストが必要なときに便利 否定版のNotEqualValuesもある 構造化されたテスト *testing.T.Run テストをネストさせて構造化したいときは*testing.T.Runメソッドが使える testifyというかgoのtestのデフォルト機能 channelが絡んだテスト channelに値が投げ込まれたことをテストする testifyはLenというアサーションメソッドが用意されており、これはchannelにも使用できる ただしchannelに何かが送信された場合はそのチャンネルのキャパシティを明示的に1以上に指定しなければならない channelはデフォルトでキャパシティは0 0キャパのchannelのlenは常に0になるらしい この問題はLen以外のアサーションを用いても起こる Mockの使い方 基本的には公式のとおりにやればいい。 OnとReturnでのMockの挙動設定 以下のようにmockのメソッドを定義しておく Calledというメソッドがmockにその引数で呼ばれたことを記憶させる args.int(0)みたいなのが何してるかは後で説明する 実際にmockの挙動を設定する OnでSavePersonDetailsというメソッドをfstNm, lstNm, 20を引数として呼んだときに、Returnで30, nilという値を返すという設定ができている 先のmockのメソッド定義で出てきたargs.Int(0)というものがReturnで渡された値を使ってメソッドの戻り値を設定している argsというのがReturnに渡された引数、つまりこの場合は30, nil args.Int(0)は30, nilの0番目、つまり30をIntにキャストして戻り値とするという意味 goは型が弱いので用意されているヘルパー関数を使って明示的にキャストしてやる必要がある それがキャストできないような場合、つまりReturn(“a”)のときにargs.Int(0)とかやるとpanic 設定したmockの挙動が想定どおりに呼ばれたかをテストする 例えば以下のようにmockを設定する これがこの通り呼ばれたことをテストしたい つまりmoのSavePersonDetailsメソッドがfstNmとlstNmを引数として呼ばれたことをテストしたい mockのAssertExpectationsメソッドを使用する AssertExpectationsはただ呼ばれたことを検証するメソッドだが、他にも回数を指定して検証を行えるAssertNumberOfCallsなどがあるのでそれはユースケースに応じて 可変長引数を取るメソッドをモックする 例えば以下のようなinterfaceがあったとする このinterfaceをMockするときに注意する必要がある 具体的にはモックメソッド内では可変長引数は配列として扱われるのでそれを展開してCalledを渡す必要がある 条件に合致したオブジェクトが引数になって呼ばれたかをチェックする 以下の奴らがいたとする このRepoをモックしたい モックの設定としてはPerson.age >= 20なpが引数として呼ばれることを設定したい ただし実際のageはテストするまで確定しない このときにmockRepo.On(“Save”, Person{age: 30})みたいなことはできない […]
Go tips
nullableな値を使用したいとき jsonやdbスキーマを扱うときにnullableな値を扱いたい しかしgoでは値型に対してデフォルト値が存在して何も指定しない場合はそれが用いられてしまう i.e. stringのデフォは”” null的な値を扱いたいときにはpointerを使う pointerのデフォ値はnilなので何も指定しないときはちゃんと何もないことが指定される コンパイルするときに値を埋め込みたい まず変数を用意する main.go コンパイルするときにldflagsというオプションを使用すると値を埋め込める これでaはプログラム中でhogeという値になっている 埋め込みたい値がmain package以外にあるとき 基本的には上のやり方で行ける 変数までのパスがファイル名ではなくパッケージ名で有ることに注意 参考 pointer型のフィールドを持つstructを値ベースで等値性を検証したい 以下のようなstructがあるとする これをそのまま比較するとpointerのアドレスで比較されるので同じ値のpointerを入れてても等値だとみなされない 値ベースでの比較を行い時にはreflect.DeepEqualを使用する
amchartsとjestの併用
jestでamchartsの関数を使用したテストを書こうとするとなんか知らんがバグる probably not plain javascriptみたいなことを言ってくるが原因はよくわからん これに従うと治る これだけだとなんかreact自身がバグる事もあったが、yarn installかますとそれも治った