テストとセキュリティの葉桜JSに参加してきた
#葉桜JS に参加してきたので記憶メモ。
(脳内記憶で書いたので、何かと解釈が間違ってる場合があります)
#葉桜JS 会場の様子です pic.twitter.com/rIhgaxceHd
— azu (@azu_re) April 14, 2014
葉桜JSとは
唐突にネタを持ち寄って食事とかする場所です。
@kyo_agoさんとかが適当に投げた、
それっぽいハッシュタグに反応した人を適当に呼んで開始しました。
kyo_ago
Buster.JSはどうなってるのか
- dwittnerさんがメンテしてる
- ドキュメントよりの人なので、あんまり機能開発は進んでてない
- Buster.JSにみたいにSinon.JSが統合されてると、stubの開放処理をミスらない
- テストコードをASTパースして自動的に開放処理を入れられるか?
- 非同期処理の時に何時終わったのか分からない
テストのコスト、メトリクス
- 重要なテストといらないテストを見分けたい
- テストコードを読むときにどれが重要なのか分からない
- 不要なテストが多いとテスト実行時間がかさむ
- Seleniumはテストの実行時間の増加が顕著
- バグを修正するときにそれのSeleniumのテストを書くべきか問題
- テストにラベル/タグ付けをして、必要なテストをグループで実行出来るような仕組みが有用?
- YUIのテスト構成について
- CIではたっぷりテストを回す、テストを回す効率について書かれてる
- Testing YUI Everywhere
- 昔のテストといえば、特定のディレクトリにまとまってたのでディレクトリ単位だった
- 今は色んな所にテストがある
- そのためテストにタグ付けをしていくの主流かも?
- テストカテゴライズ
sourcemapを複数回変換する問題
- 現状だと特に複数回に対する仕様はない
- a -> b -> c みたいにそれぞれがちゃんとやってることを期待するしかない
- ウンヨウデカバー
- a – …. -> c みたいなマッピングならできるはず
teppeis
TypeScript用フルスタック型付きライブラリのご提案
- 「我々には型が必要な事は明白です」
- Closure Library という型を持ったライブラリがある
- JSDoc から TypeScriptの
d.ts
型宣言ファイルへと変換するツールを書いてみた - Esprimaとdoctrineを使った
言語に依存しない汎用型定義
- 特定の言語に依存しない、型を定義するだけの物体が欲しい
- doctrineではJSDocをパースした時にJS ASTのように定義をASTっぽい感じにする
現実問題
- 現実的な問題として、言語によって型そのものが等の扱いがバラバラ
- JSXとTypeScriptでさえnullable等の違いがある
- d.ts -> 他 は TypeScriptの型が少ない目なので意外とできなくはない
- 「汎用型定義生成の夢」
- write once run anywhereや!
azu
Test Runner Tips
大体はスライドTest Runner Tips書いてあります。
- Mocha
- 実質的な覇者
- やってる範囲は狭いので他と合わせて使う
mocha.opts
という謎の設定ファイルのユースケース- Node.jsとブラウザで同じものを動かしたい
mocha
オブジェクトを直接弄ってテストの設定を動的に変更する
- testem
- まっとう
- 既存ツールと連携しやすい
- testem2の進捗どうですか?
- Karma
- 大きい
- プリプロセッサという拡張について
- sourcemapを使ってスタックトレースの書き換えまでサポートしてる
- Karmaの未来について
- よりコミュニティを意識するという話
jxck
テストライブラリ
- QUnitは最近どうですか?
- 深刻なバグ(requireで使えない)のfixが中々マージされなかった
- QUnitの基本的な使い方 – Block Rockin’ Codesの記事が未だに参照されまくってる話
- この記事の時に非同期のテストサポートなかった
- Mochaの記事にかえてしまおうか?
- substack/tapeについて
- assertの数を最初に書くのはperl文化っぽい
- 本当にそのassertがテストで実行されたのかを保証したい
- spyとやりたい事は似てる
- けど、単純にassertの数を数えるだけでそれが実現できる
- QUnitはその辺もあって、テストが失敗してもテストが続く(今だとQunitだけ?)
- QUnitの歴史、どのようなテストフレームワークに影響を受けてうまれてたかについて
nanotest
- 最小のテストを目指してた
- assertの数を数えるメソッドを
assert
に拡張してた assert
を書き換えるのは難しいpower-assert
でもやってて難しい話
- 「
require
を盗むのはやめましょう」
mochaのdoneについて
done
は非同期に対するテスト?- それともコールバックに対するテスト?
- Promiseみたいな例外はテストライブラリがサポートしてないと上手くいかない感
- 本当に
then
が呼ばれたのかが心配になる - assertのカウントがやっぱり必要?
- 本当に
「人類は Harmony を使いこなせるか? – Generator 編 」
- generatorを直接使いたいか?
- ライブラリ側で使って、直接は使いたくないかもという話
- テストだけでgeneratorを使いたい?
- コードとテストのパラダイムが違うのは問題かどうか?
- テストをどうしたいかの方針によって違う
- できるだけ簡単に書きたい => 別パラダイムあり
- できるだけ読みやすくしたい、サンプルとしてのテスト => 同じパラダイム
テストの課題
- テストはドキュメント or テストを簡単に書きたい
- 相反する課題
- テストを簡単に書きたい => 極論はaltjsでテストを書くようなモノになっていく
FormのPUT/Delete 再び
- Formの場合はクッキーを送ってしまう所がXHRでやるのと異なるケースが出てくるかも
- イントラネットでFormからPut/Deleteがコない前提のものとか
- JavaScriptが発展する前に、Formの拡張の話がきてたら流れは違ったかも。
- 現実面ではサポートコストが大きすぎる部分が多い
- HTMLの仕様としては欠けてる感がある
- Amayaの話まで戻る
- 「ホントにPOSTあってよかった」
t-wada
「power-assertができるまで」
- power-assertが出来るまでの背景
- Pythonの人がPythonでもPOWER ASSERTができると言ってた
- PythonでできるならJavaScriptでも出来るはず
- Node学園でsubstackやIsaacの話を聞いてNodeにもUnix文化があると知った
- 最初はC1以上のカバレッジツールを作りたかった
- SQLアンチパターンが忙しかった
- 現実逃避 -> power-assertのプロトタイプ作成
- 最初はQunitと合わせてた、
assert
互換になるのは結構後 - SimpleとEasyは別もの
- Rich Hickeyの話を聞いて、power-assertの構造を決めていった
- それぞれsimpleのレイヤーを分けた
- AST < -> AST、Source < -> Source、File < -> Fileをやる所がある
power-assert 0.6.0
- 今まで一番大きなアーキテクチャ変更
- ASTのメタ情報を生成してASTに埋め込む
- 実行時にメタ情報を取り出して、解釈する
- メリットとしてはレポーター等からもメタ情報を利用できる
- estraverseの
path
を使う事で一意にASTのnodeを得られる - 実行時にそこを見る
Concrete Syntax Tree
- CSTについて
- ASTだとBinaryExpression(+)の+の位置等の情報そのものはない(tokenとか駆使)
- CSTはそういった情報やコメントについても定義しようというプロジェクト
- 議論がどこまで進んでいるのか気になる
yosuke_furukawa
Docker Node Tester
Docker Node Testerの話 in 葉桜js // Speaker Deck
Docker Node Testerを使ってNode.jsをバージョン毎にテストする #葉桜js – from scratch
- Node.jsの v0.10と0.11を一緒にテストしたい
- Githubのtag等を直接checkoutしてテスト環境を作れる
- 多分Node.js以外でもいける
- TravisだといちいちPushしないといけない、Dockerなのでローカルで出来る
Docker
- Dockerが突然死ぬことがある
- JenkinsおじさんからDocker職人へ
- まだ脆い部分もあるので、Docker一本だと難しい所がある
- Ubuntuについて
- 本番環境がUbuntuならデスクトップもUbuntuで合わせると楽
- CentOSツライ
- 最近は色んなソフトがUbuntuサポートしてる
mala
なぜAngular.jsを使ってXSSがおきるのか
- アカウント登録してメールがきた時点で怪しいURLだった
- リダイレクトが指定出来る感じだった(なぜか空)
javasript:
を入れると動いた- 投稿する前に見つかった
- 今の人は
javasript:
自体を知らないのでは説
- AngularJSとサーバーサイドテンプレートの混在とngNonBindable ::ハブろぐ
- 普通に使ってればAngular.JSは結構固い
- 自由なアカウント名が取られてる話
- 知見 – 登録されるとつらいユーザー名リスト – Qiita
- URLの運用大変そう
メモ: Twitterに直接と脳内記憶
その他
後、自分は作って発表する時間なかったので発表してませんでしたが、
power-assertの記事が出来るまでというスライドを作りました。
という2つの記事を書くまでに至った思考の流れとかをまとめた感じです。
調査しながら記事書く時の話みたいな感じです。
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。