2017-01-23 7 views
2

のブートは、(a)すべてのソースファイルがカレントディレクトリにあり、(b)ソースファイルが変更されるたびにユニットテストが実行され、 (c)REPLは、それを含むソースファイルが変更されたときに定義をリフレッシュしますか?具体的にClojure/bootの簡単なワークフロー設定を求める

  • build.bootに行きますか?

  • REPLを起動するシェルコマンドとは何ですか?そして/またはREPLのどのコマンドが単体テストの監視を開始するのですか?

  • その他の従来の設定は何ですか?

私はbootboot-testboot-quick-testREPL reloading in boot、およびboot-refresh上の文書の多くを読みましたが、私は仕事に多くを取得することができていません。私が今までに見つけたドキュメントは、ちょっとしたヒントを提供するようですが、これらのことをまとめるために必要なものはありません。

適切なbuild.boot(およびその他のもの)の簡単な例が特に役に立ちます。


これまでのところ、これが私の作品です。

(set-env! 
    :dependencies '[ 
    [adzerk/boot-test "1.1.2" :scope "test"] 
    [org.clojure/tools.namespace "0.2.11"]] 
    :source-paths #{"."}) 

(require '[clojure.tools.namespace.repl :as repl :refer [refresh]]) 
(apply repl/set-refresh-dirs (get-env :directories)) 

プラス現在のディレクトリ内のファイル、sample.clj

(ns sample 
    (:require [clojure.test :refer :all])) 

(defn myfunc [] "this string") 

(deftest test-myfunc 
    (is (= "this string" (myfunc)))) 

これは、現在のディレクトリ内のソースファイルを見つけることがブートを取得し、それは私が手動で入力することにより、sample.cljに変更を再ロードすることができますREPLの(refresh)(boot (test))は、.cljファイルのユニットテストを手動で実行するために使用されていますが、「失敗した数のargs(0)が渡されました:core/test」というエラーが表示されました。

これは正しい方法はありますか?

答えて

1

Due to how Boot handles watching and notifying about file changes you cannot use clojure.tools.namespace.repl/refresh directly.

あなたはそれのためのラッパーを使用することができます - samestep /ブートリフレッシュ:今、あなたは、ファイルの変更にリロードされますREPLサーバを起動することができ

(set-env! 
:dependencies '[[adzerk/boot-test "1.1.2" :scope "test"] 
       [samestep/boot-refresh "0.1.0" :scope "test"]] 
:source-paths #{"."}) 

(require '[samestep.boot-refresh :refer [refresh]] 
     '[adzerk.boot-test :refer :all]) 

を:

boot repl -s watch refresh

IDE(例:CIDERまたは筆記体)または

から接続してください

boot repl -c

ソースファイルに変更が検出されると、適切な名前空間がリロードされ、クライアントのREPLセッションで使用できるようになります。

また、別の端末でboot watch testを起動して、自動テスト動作を取得することもできます。

そして最後に(boot (test))は、引数(0)の間違った番号を与えると、あなたの問題はに渡された:あなたが呼び出すために望んでいたtestタスクが含まれているadzerk.boot-testを必要としなかったため、コア/テストが発生しました。代わりに呼び出されたclojure.test/testが存在する可能性があります。

+0

ありがとうございます!私は再び生産的になり始めています。私は2つのREPLプロセスを始めるトリックについては知らなかった。それでもなお、ソースファイルに新しい 'defn'を追加すると、' repl -s'プロセスはそれを再ロードしますが、 'repl -c'プロセスはそれを見ません。つまり、REPLクライアントのコマンドラインで新しい関数を呼び出そうとすると、「Unable to resolve symbol」と表示されます。しかし、既に存在する関数の定義への変更は、 'repl -c'プロセスに現れます。助言がありますか? –

+0

私は、 ':refer'や':as'が 'require 'と内部的にどのように働くのかという問題があると思います。私は同じ問題を抱えていますが、完全なnsで新しいシンボルを呼び出すことは私のために働きます。 –

+0

完全なnsを持つ新しいシンボルを呼び出すコマンドは何ですか? (私は "新しいシンボルを呼び出す"ことが何であるか分かりません) –

関連する問題