2015-03-17 14 views
5

Ho un libro di cucina per chef con una biblioteca, ad es. library.rb. Esso contiene una CONSTANT:Chefspec carica ripetutamente le librerie e fornisce l'avviso "Costante già inizializzata COSTANTE"

CONSTANT = 'constant' 

Quando scrivo unit test per questo libro di cucina, mi dà sempre l'avvertimento:

(Some prefix...)warning: already initialized constant CONSTANT 
(Some prefix...)warning: previous definition of CONSTANT was here 

Gli avvertimenti vengono su più volte, tutte le volte che il numero di esempi (casi di test) meno uno. Penso che sia perché chefspec carica le librerie una volta per ogni esempio. Qualcuno potrebbe dirmi come caricare le librerie solo una volta o come disabilitare il messaggio di avviso?

+0

'CONSTANT' è una costante, non è una variabile. – sawa

risposta

6

brevi, modificarlo a:

CONSTANT ||= 'constant' 

a lungo termine, è meglio usare un let(), o per spostare il costante fuori del caso di test, o di scegliere qualsiasi altro modo di sostituire la costante, o per garantire che il codice di test carichi la libreria una volta, non molte volte.

Modifica - Buon punto per @sawa nei commenti: se il vostro costante è nil o false, allora l'approccio ||= non si ferma gli avvertimenti, così si vorrà una soluzione migliore come ad esempio:

CONSTANT = 'constant' unless defined? CONSTANT 
+1

Questo funzionerà per questo caso particolare, ma si interromperà se quel valore fosse 'nil' o' false'. È meglio usare 'defined?' Oi suoi parenti. – sawa

Problemi correlati