2017-10-04 76 views
3

Clojure 1.9介紹specs。 clojure.core庫中的函數現在有規範。我如何設置一個clojurescript項目來使用規範並在運行時測試clojure.core函數?如何設置clojureScript項目以使用規範並在運行時測試clojure.core函數?

我使用庫[org.clojure/test.check "0.10.0-alpha2"][org.clojure/spec.alpha "0.1.123"]來安裝specs和命令instrument。它試圖檢測我編寫規範的函數中的問題。但它沒有檢測到clojure.core(例如,map)的問題。

也許規格不適用於clojurescript呢。

+0

您是否要求驗證在調用時傳遞給core.clj中每個函數(或至少大部分函數)的參數的結構? (因爲規範使用它們,所以它們都沒有包含它們,所以它會是毫無根據的遞歸,沒有一些技巧。 –

+0

是的,我想驗證儘可能多的函數。 – dilvan

+0

我使用了庫[org.clojure/test。檢查「0.10.0-alpha2」] [org.clojure/spec.alpha「0.1.123」]'並使用'instrument'。它用於檢測我編寫的函數中的問題,但它沒有檢測到問題clojure.core(例如,map)。也許規範不適用於clojurescript(我正在使用'[org.clojure/clojure「1.9.0-beta1」] [org.clojure/clojurescript「1.9.946」] ')? – dilvan

回答

2

這是因爲沒有規範的clojure.core功能,只有一對夫婦宏規格 - 看這裏:https://github.com/clojure/core.specs.alpha/blob/master/src/main/clojure/clojure/core/specs/alpha.clj#L53

注意,即:

宏宏擴展過程中總是被選中,您不需要 調用儀器宏規格

https://clojure.org/guides/spec#_macros

您可以編寫自己的規範爲核心功能,並進行註冊,如下所示:https://clojure.github.io/clojure/branch-master/clojure.spec-api.html#clojure.spec/fdef

(s/fdef clojure.core/symbol 
    :args (s/alt :separate (s/cat :ns string? :n string?) 
       :str string? 
       :sym symbol?) 
    :ret symbol?) 

但是,要小心這一點,因爲你可能會陷入討厭的問題,如果你沒有得到它的權利。

相關問題