2010-12-16 5 views
8

Ich bin neu bei Clojure, und ich habe ein paar Probleme mit der Durchführung von Komponententests.Symbol kann nicht aufgelöst werden: ist in diesem Zusammenhang

(ns com.bluepojo.scratch 
    (:require clojure.test)) 

(defn add-one 
    ([x] (+ x 1)) 
) 

(is (= (add-one 3) 4)) 

gibt:

java.lang.Exception: Unable to resolve symbol: is in this context 

Was bin ich?

Update:

Dies funktioniert:

(clojure.test/is (= (add-one 3) 4)) 

Wie kann ich es so machen, dass ich nicht habe clojure.test zu erklären, bevor das ist?

Antwort

12

Die Verwendung des Makros ns ist nicht ganz korrekt und Sie haben mehrere Möglichkeiten, es zu beheben. Ich würde eine der

1. Alias ​​clojure.test etwas kürzer

(ns com.bluepojo.scratch 
    (:require [clojure.test :as test)) 

(defn add-one 
    ([x] (+ x 1))) 

(test/is (= (add-one 3) 4)) 

2. Verwenden vorschlagen use

(ns com.bluepojo.scratch 
    (:use [clojure.test :only [is]])) 

(defn add-one 
    ([x] (+ x 1))) 

(is (= (add-one 3) 4)) 

einen Blick auf this article nehmen, die diese mit einiger Ausführlichkeit erklärt

+0

Ehrfürchtig, danke! –

+2

Du verpasst ein schließendes ']' im ': require' sexp und' use' ist jetzt veraltet zugunsten von 'require' mit': refer'. – Zaz

3

Nur Verwenden Sie require und refer

(ns com.bluepojo.scratch 
    (:require [clojure.test :refer :all)) 

Dann einfach

(is (= (add-one 3) 4)) 
(are ...) 

:refer nimmt auch eine Liste von Symbolen aus dem Namensraum beziehen (z :refer [is are]).