2015-03-17 11 views
5

Mam książkę kucharską kucharza z biblioteką, np. library.rb. Zawiera on CONSTANT:Chefspec ładuje biblioteki wielokrotnie i wyświetla ostrzeżenie "już zainicjowana stała CONSTANT"

CONSTANT = 'constant' 

Kiedy pisać testy jednostkowe dla tej książki kucharskiej, to zawsze daje mi ostrzeżenie:

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

Ostrzeżenia wymyślić wielokrotnie, tyle razy, ile liczbie przykładów (przypadki testowe) minus jeden. Myślę, że to dlatego, że chefspec ładuje biblioteki raz dla każdego przykładu. Czy ktoś mógłby mi powiedzieć, jak załadować biblioteki tylko raz, lub jak wyłączyć komunikat ostrzegawczy?

+0

'CONSTANT' jest stałą, nie jest zmienną. – sawa

Odpowiedz

6

krótkoterminowa, zmień go na:

CONSTANT ||= 'constant' 

dłuższej perspektywie, to lepiej użyć let() lub przenieść stała się z testu, lub wybrać inny sposób zastąpienia stałej, lub aby zapewnić, że kod testowy wczytuje bibliotekę raz, nie wiele razy.

Edit - Dobry punkt przez @sawa w komentarzach: jeśli stała jest nil lub false, wtedy podejście ||= nie zatrzymuje ostrzeżenia, więc będziemy chcieli lepszego rozwiązania, takie jak:

CONSTANT = 'constant' unless defined? CONSTANT 
+1

To będzie działać w tym konkretnym przypadku, ale przerwie się, jeśli ta wartość to 'nil' lub' false'. Lepiej używać 'defined?' Lub jego kins. – sawa

Powiązane problemy