ゆるふわ技術日誌

エンジニア見習いの悪戦苦闘日記

AVA + TypeScriptでイケイケテスティング

やっほー、みんな元気かい?ううたろだよ!(唐突なYouTuber感)

今日はAVAというライブラリ+TypeScriptでテストを少しだけ書いてみたから紹介するよ!

AVAとは

github.com

これ。JavaScriptのテスティングフレームワークのこと。

ロゴがでんぱ組のロゴに似ていたので採用しました。

準備

単にJSであればUsageの所に書いてあるnpxコマンドをプロジェクト直下で実行すればよしなにDependeciesを追加してくれてすぐテストかける状態になるのだが、TypeScriptの場合は少しだけ設定が必要。(tsで書いたテストをビルドして実行する分にはいらない)

詳しい設定は以下に書いている。

ava/typescript.md at master · avajs/ava · GitHub

要はpackage.json

{
    "ava": {
        "compileEnhancements": false,
        "extensions": [
            "ts"
        ],
        "require": [
            "ts-node/register"
        ]
    }
}

って書き足して、

yarn add -D ts-node

とかやってやりゃよいというわけ。(ってかts-nodeってあるんすね。すごい)

これでビルドしなくてもテストができる。

書いてみる

基本的にはJSと書き方は同じ。

1点だけ、ハマりそうになったのはcontextを使う場合。

何も考えずにcontextを使おうとするとTypeErrorが出てしまう。そこで以下のようにする。(というかコレも↑の公式ドキュメントに書いてる)

import anyTest, { TestInterface } from 'ava';
import Trial from '../model/trial';

const test = anyTest as TestInterface<{trial: Trial}>

これでt.context.trial = xxxxみたいなことができる。カンタン。

雑感とか

  • 日本語のドキュメントもある。(ここ)
  • ただ若干古いようなので英語版読んだ方がよさそう。いくつかないアサーションがある。
  • skipとかonlyとかめっちゃ便利やんおいおいと思った。いちいちコメントアウトとかしなくていいの素敵。
  • 当たり前なのだが、tsのenumとかを比較してるところで落ちても実際の数字がエラーに出てきてしまうのでわかりづらい。なんかよろしくやる方法ないかな。(enumに値ちゃんとつけてあげればいい話なんだよね)

雑談

てなわけで、テスト書いた。

github.com

適切なテストケースの作り方がわからない。

技術トークしたりした他

技術トークした

WebpackやらRailsやらの話を同期とした。

最近見つけたRailsSTIの話で大変盛り上がった。言語化が少しは上手になったかなと感じた。

yurufuwa-tech.hatenablog.com

↑この話

技術を伝える時は用いると解決できる課題をなるべく具体的に示すのが伝わりやすいのだと思った。

AVAが良さそう(まだ書いてない)

最近すっかりテストコードを書くことにハマってて、昨日書いたSlack botにもテスト書いてあげたいな〜と思ったのでテストフレームワークを調べた。

以前mochaは書いたことがあった(バイト先にて。その時はテストのありがたみもなんもわかってなかった)が、他にもAVAというものがあるらしいということを知った。

github.com

デフォルトでテストを並列に走らせてくれるので速いのだそう。僕のコードベースじゃパラレルだろうがシリアルだろうが関係なさそうなくらい小さいけどアサーションもわかりやすいしひとまずこれを使ってテスト書いてみることにした。

雑談

心が辛い〜〜〜辛すぎる〜〜〜

Slack botを作って遊ぶ

心がしんどくてやる気が出ないときは、自分がやる気を持てるものをやるのが大事だなって思ったので、前からやってみたかったSlack botを作りました。

作ったもの

「審議」「有罪」「無罪」というemojiが前からあったのでこれを使って裁判ができるbotを作った。

使用技術

  • Node.js
  • Slack Real-time messaging API(みたいな名前だった気がする…。以下RTM)
  • node-slack-sdk

こんな感じ。完全に思いつきで作り始めたのでコードが悲惨なことになったけどそれは後で書き直す。

所感

  • 思った以上に簡単。ビビる。
    • このへんはQiitaにでも書きます。
    • RTMはWebSocketを用いて実現されていて、botが参加している会話で起こるありとあらゆるイベントが降ってくるというもの。(メッセージが投稿された/消えた/リアクションがついた/消えたなど様々)本来なら接続が切れた時の再接続やらイベントハンドリングやらを自分でごちゃっとやらねばならないのだが、その辺は全部SDKがやってくれるので素敵。
  • 自分の素のJSに対する知識の薄さを痛感
    • Class周りがやばい…かも
  • SlackのAPIドキュメント、場所がわかりづれえ。
    • 恐らくSDKを使う人が見なければいけないのはEvent Types
    • 見つけてさえしまえば中身はとってもわかりやすくて好印象
    • こういうところがちゃんと整備されてるのも世界中のエンジニアから愛される秘訣なんだろうなぁ

こんな感じだろうか。コードは後ほどリファクタリングしたらGitHubにでもあげるつもり。

雑談

試し書きとして書いたSlack botを供養する

チャンネルが凍りつくSlack bot

なんとなくコードの雰囲気が伝わるだろうか。(今気がついたけどmessagesグローバル変数になってる🤯最近Rubyばっかやってたので変数宣言間違えがち。てかなんならこの変数毎回初期化する必要性どこにもないね)

実際に使うとこうなる。

ぜひあなたのチームにも()

中間発表にむけていろいろと。

今日は昨日の宣言通り研究の事をいろいろとしました。

ひとまずは来月の中間発表を乗り越えられるようにここまでの調査とかをまとめたりした。

一回読んだ論文をもう一回確認したりしてたけど、どうにも集中できなくてあまり良くない時間の使い方をしてしまった感がある。

つらいなぁ。

もうこんな事しか書かないならブログなんてやめてしまった方がいい気がして来た。

盛りだくさんの1日でした

いろいろやった盛りだくさんの1日でした。

盛りだくさん1 Railsたくさん書いた

なぜか、なぜだか研究室に新しく配属された3年生といっしょにRailsをやっています。

最初は余裕だったRails Tutorialも後半になるにつれて知らないことが増えて来てとてもいい勉強になっています。(もちろんRailsにしか役に立たない知識もたくさんあるのですが、そうではない知識も詰まっているので将来的にRails使うつもりはなくても十分役に立つものだと思う)

特にRails Tutorialから僕が学んだ点としては、TDD的な開発。

テストを先に書いておいて、それを満たすように本番コードを書いていくというおなじみの手法なのですが、実際に自分でやったことがなかったのでどのようなテストを書くべきなのか、どのようなことはテストしなくても良いことなのかということを学べてよかったかなと思っています。

あと、何と言ってもテストが全部パスした時の快感といったらない。できればCIとかもつかってみたいなぁ。

盛りだくさん2 フロントエンド

最近若干サボり気味だったフロントエンドの勉強、ReactのContextAPIが気になっていたので触ってみるついでに自分のポートフォリオサイトを作っています。

f:id:uutarou:20180703234808p:plain

(テーマカラーを入れ替えられるみたいなやつを作るつもり)

ちなみに、なんでポートフォリオサイトかというとウチの研究室では新しく配属になると顔写真入りのポートフォリオサイトを作って内部向けのWebサーバーに置いてみるみたいな課題をやるのが通例になっていて、ちょうど自分が配属されてから間も無く1年なので作り変えようかなみたいな。1年経っての成長が現れるといいが…。

(参考 1年前に作ったやつ) f:id:uutarou:20180703235619p:plain

実際には顔写真が載っている。これはベタがきHTML&無意味にWebpackでリソースバンドルしたりした気がする。あの頃は呪文だと思ってコンフィグ書いてた気がする。

雑談

研究より趣味でなんかコーディングしてるほうが圧倒的に楽しくてめっちゃ困る。

今日は朝から晩までずーーーーーっとなんかしらコーディングしてた気がする。楽しい。

明日は研究のことやりましょうかね。

テストのありがたみを知った

テスト、大事。

テストを書いてたらバグを見つけた。

初めてテストを自ら書いた。

慣れていないのでテストフレームワークの使い方をミスっててテストが通らないのか、本当に処理が間違ってるのかが理解できなかった。慣れだね。

雑談

暑すぎひん?