10

clj-webdriver を使用して、Clojurescript Web アプリで Selenium ベースのテストを行っています。ときどき、テストの実行中にアプリ自体をいじりたいことがあります。clj-webdriver には(execute-script js args)、Javascript コードの文字列を受け取り、現在のテスト用ブラウザーで実行するという名前のものが含まれていることがわかります。私はこれをテストしましたが、うまくいくようです。ただし、 clojurescriptコードを渡したいと思いexecute-scriptます。Clojure フォームを Clojurescript コードにコンパイルするものが必要です。

次のような質問があります。クラッチから js/emit 関数を使用するように指示されています。クラッチを検索したところ、cljs-views.clj の(view) でのみ言及されていることがわかりました。repl で次のことを試みました。

user> (use 'com.ashafa.clutch.cljs-views)  
  nil  
user> view 
  <core$comp$fn__4034 clojure.core$comp$fn__4034@ebd3f80> 
user> js/emit 
  CompilerException java.lang.RuntimeException: No such namespace: js, #compiling (NO_SOURCE_PATH:1)   
user>

これはそれほど驚くべきことではありません。なぜ js が通常の clojure 名前空間にあるのでしょうか? しかし、この (または他の) システムを使用して、渡すことができる Clojurescript (javascript) コードを生成するにはどうすればよいexecute-scriptでしょうか?

4

1 に答える 1

4

cljs.closure/build関数を使用します。

(use '[cljs.closure :only [build]])
(build '(print "hello") {:optimizations :simple :pretty-print true})

Closure.cljの下部にあるコメントには、さらに多くの例があります。ファイルに出力するオプションもあります。

于 2013-01-15T00:04:33.047 に答える