お使いのブラウザはサポート対象外です。

2021年09月22日(水) の日報

2

ciが失敗したときだけログ出力するgemを作った

  • willnet/ci_logger

  • とりあえず動くのでリリースしようぜ、でv0.1.0をリリースした

    • もうちょい使ってこなれてきたら&&速いのが検証できたらちゃんとブログに書こうと思います
  • CIを速くするためのプラクティスとして「ログ出力を止める」というのがある

    • が、それってどうなの、と思っていた
    • 速くなるのはいいけど、ログがないと時々失敗するテストの調査ができないのでは
    • というわけで、テストが失敗したときだけログを出せると全てうまくいくのでは、となりそういうのを作った
      • しかしサバンナはもともとCI時にinfoでログ出力をしていたせいでパット見てわかるほどの差はない
      • debugなプロジェクトと比較する必要がある
  • コード自体は基本的には大したことしてないが、RSpecと連携させるところで苦労した

  • テストのほうが大変だった

    • RSpecを使っていれば自動的に連携するようにしたが、それをテスト上で動かすのがたいへん
  • ↓のようなテストを作ることで、minitestの上でRSpecを動かすことができる

    • やろうと思えばRSpecの上でRSpecを動かすこともできる(実際rspec-coreのテストはこのようなコードをRSpec上で動かしていた
    • group.runに対してreporterというものを引数で渡さないとformatterが発火しない(NullReporterがデフォルト値になっている)、というところで1時間ほど溶かした><
    • reporterがイベントを通知して、対応するイベントを購読しているformatterのメソッドが実行されるという構成になっている
    • reporterはformatterと紐付いているので、テスト用にReporter.newのようにするとformatterと紐付いていないreporterができてしまい意図通りにformatterが発火しない
  test "success test doesn't write logs on CiLogger enabled" do
    group = RSpec.describe 'hello', type: :request
    group.example do
      get '/users'
      expect(response.status).to eq 200
    end
    group.run(@reporter)
    assert File.empty?(LOGFILE_PATH)
  end   

email_address_with_nameメソッド