私はあまり書いてません。
テストは大事です、書きましょう。
私は現在ClojureScriptを使っているのですが、JavaScriptでのテスト方法とかよくわからないし、Clojureでテスト書きたいので、ClojureからClojureScriptを読み込もうという考えに至りました。
が、しかし。
requireなどを使って、ClojureScriptのコードを読み込むことはできませんでした。
なぜなら拡張子がcljsだから。
load-fileなども使ってみましたが、無理でした。
ClojureScriptのコードの中でrequireを使っているからです。
どうにかして拡張子がclj,classのファイル以外を読み込むことはできないのかと調べてみたところ・・・・
https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/RT.java#L403
ベタ書き・・・!
差し替えることなど到底無理っぽい。
ならば作るしかありません、cljファイルを。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns onedit.test | |
(:require [clojure.java.io :as io]) | |
(:use clojure.test)) | |
(def names ["foo" "bar"]) | |
(defn cljfile [name] | |
(io/file (str "test/geso/" name ".clj"))) | |
(defn cljsfile [name] | |
(io/file (str "src-cljs/geso/" name ".cljs"))) | |
(defn setup [] | |
(doseq [name names] | |
(io/copy (cljsfile name) (cljfile name))) | |
(doseq [name names] | |
(use (symbol (str "geso." name))))) | |
(defn cleanup [] | |
(doseq [name names] | |
(io/delete-file (cljfile name)))) | |
(setup) | |
(defn fixture [f] | |
(f) | |
(cleanup)) | |
(use-fixtures :once fixture) | |
(deftest geso | |
(testing "Foo Functions" | |
(testing "geso geso" | |
(is (geso?))))) |
copyしてuseしてdeleteする、悲しみあふれるコード。
cleanupのところはtry-finallyした方が良いかも。
clojure.testはfailした時にマクロを利用して述語に渡した値を展開してくれたりでなかなか便利なので割と好きです。
しかし、ここまでして使うのもどうかなと。
素直にJavaScriptのテストフレームワークを使うとか、assertで済ませる(ClojureScript本体のテスト方法)などでいいかもしれません。
0 件のコメント:
コメントを投稿