LoginSignup
6
3

More than 5 years have passed since last update.

JSをテストするCargoの拡張機能を書いてみた話

Posted at

Introduction

皆さんよいrustライフをお送りでしょうか!

rust 1.14のリリース以降、かんたんにasm.js及びwasmのコードが吐けるようになりました。ところがまだJavascript側とのブリッジになるようなライブラリはあまり(?)ないようです。そこでこことかにもちょくちょくメモしているのですが、Emscriptenの関数を叩いてJS側との橋渡しをするrustのライブラリをちょろちょろ書いています。

この際に気になったのがtestです。こちらの記事によくサマライズされていますが、rustはいい感じのテスト方法を持っています。しかし、targetをasmjsにするとこれが途端に使えなくなってしまいます。更に贅沢を言うと、ブリッジコードのテストもしたいのでJS側のコードも予め読んでおきたいように思います。

ということで、これらを何とかするためにCargoのsubcommandを作ってみました。

注意

筆者もまだrust歴が極めて浅いのであまりrustっぽくないコードを書き散らしている可能性があります。気になる点などありましたらぜひご教授ください。

Cargoとは

言わずと知れたRustのすごいやつです。Subcommandの作り方の詳細(?)は拙ブログにまとめてみたのですが、Cargoにはかんたんにsubcommandを追加できる機能があります。

shell scriptかpythonあたりでちょちょっと書いてしまったほうが楽かもしれないけど今回はせっかくなのでrustを使って新しいsubcommand, testjsを作ってみました。

インストール

crates.ioに登録したので(ちなみにすごく簡単でした)、cargo経由でinstallできます。

$ cargo install cargo-testjs

使い方

Emscriptenが有効になっている環境で、プロジェクトのルートディレクトリに行き

$ cargo testjs

するだけです。設定は、次の3つをCargo.tomlに書けます。

Cargo.toml
[package.metadata.testjs]
node = "nodejs"
target = "asmjs-unknown-emscripten"
prelude = "tests/test.js"

それぞれの設定ですが、

node

nodejsのコマンド。絶対パス指定か、パスが通っている必要がある。デフォルトはnode。

target

デフォルトはasmjs-unknown-emscriptenだが、wasmにしてもそもそも現時点では動かないのであんまり意味がないw

prelude

testを実行する前に読み込むべきJavascriptファイル。

テストの例も書いてみました。

終わりに

rustは楽しいです。もしかしたらこれくらい誰かが書いてるかな~ってものも意外となかったりするので(とはいえこのsubcommandはどうだか調べてはいないので車輪の再発明をした可能性はあるw)、ライブラリを書くのも面白いかもしれません。ではでは。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3