2010-12-16 178 views
8

Je suis tout nouveau à Clojure, et j'ai un peu de mal à faire fonctionner les tests unitaires.Incapable de résoudre le symbole: est dans ce contexte

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

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

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

donne:

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

Qu'est-ce que je manque?

Mise à jour:

Cela fonctionne:

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

Comment puis-je faire pour que je n'ai pas de déclarer clojure.test avant est?

Répondre

12

Votre utilisation de la macro ns n'est pas tout à fait correcte et vous avez plusieurs options pour la réparer. Je suggère l'un des

1. Alias ​​clojure.test à quelque chose plus court

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

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

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

2. Utilisez use

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

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

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

Jetez un oeil à this article ce qui explique assez longuement

+0

Génial, merci! –

+2

Il vous manque une fermeture ']' dans le: 'require' sexp et' use' est désapprouvé maintenant en faveur de 'require' avec': refer'. – Zaz

3

Juste utiliser require et refer

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

Ensuite, il suffit

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

:refer prend également une liste des symboles pour faire référence à partir de l'espace de noms (par exemple :refer [is are]).