Wygląda na to, że istnieje duże wsparcie dla używania let()
w rspec do inicjowania zmiennych. Jakie są przypadki używania zmiennych instancji (np. @name
)?Kiedy używa zmiennych instancji bardziej korzystne niż przy użyciu let()?
Odpowiedz
zawsze wolą pozwolić na zmiennej instancji na kilka powodów:
Zmienne instancji zaistnieć kiedy się odwoływać który oznaczało, że jeśli popełnisz żadnego błędu w przypadku zmienna pisowni następnie to Zdecydowanie poprowadziłoby Cię to do pewnych problemów, ponieważ zmienna nowej instancji została zainicjowana do zera. Ale pozwól, że otrzymasz NameError, jeśli pominiesz go.
Dalsze będzie inicjowanie zmiennych instancji przed bloku, co oznacza, że przed blok zostanie wykonany za każdym razem Spec byłoby nawet jeśli ta specyfikacja nie używać tych zmiennych instancji zostały zainicjowane. przykład podany poniżej;
before do @user = Factory :user @movie = Factory :movie end it "should have user" do @user.should eq User.first end it "should have movie" do @movie.should eq Movie.first end
Chociaż wszystkie specyfikacje uruchomić w porządku, ale nie ma zastosowania @movie
w pierwszej specyfikacji i bez użycia @user
w sekundę.
Możesz również użyć let with bang "!" let!
, let
się leniwie oceniane i nigdy nie zostanie instancja, jeśli nie nazwać, użyj let
zdefiniować memoized pomocnika, a let!
jest mocno oceniane przed każdym wywołaniu metody.
Ja faworyzowałem to pytanie, ale na końcu sam odpowiadam na to pytanie.
pierwsze opisać różnice
Sposób let
stosowany nie zainicjować zmienną, dopóki nie zostanie wymieniony w teście - co sprawia, że różni się od @instance variables
które są inicjowane od samego początku.
Generalnie nie ma dużej niepewności. Użyj @instance variables
, jeśli chcesz się upewnić, że zainicjowano obiekt let
. Ale z drugiej strony można to zrobić tak samo z let!
, więc nie ma oczywistego powodu, aby używać @instance variable
.
Podsumowując, dla mnie, jest oczywiste powodów, by używać @instance variable
nad let
, ale nie ma żadnego oczywistego powodu, aby użyć @instance variables
nad let!
@instance variables
zajmuje więcej czasu, aby załadować, a stosując je, można prowadzić do niepożądanego złożoności kodu, który można by uniknąć stosując let
lub let!
można spojrzeć na tych dwóch odpowiedzi, jak również, a może to daje trochę więcej informacji:
RSpec: What is the difference between let and a before block?
- 1. Używa zmiennych tabeli szybszych niż tabele temp.
- 2. Kiedy AtomicInteger jest bardziej preferowany niż zsynchronizowany?
- 3. Ruby << (dwukrotnie mniej niż) o zmiennych instancji
- 4. Najlepsze praktyki przy definiowaniu zmiennych instancji
- 5. Kiedy bloki są bardziej przydatne niż funkcje (ruby)?
- 6. Uwalnianie zmiennych instancji (kopiowanie) instancji?
- 7. Wartości domyślne zmiennych instancji i zmiennych lokalnych
- 8. Kiedy dokładnie DLL używa innej sterty niż plik wykonywalny?
- 9. Java: instancji enum przy użyciu odbicia
- 10. Zamawianie inicjalizatorów zmiennych instancji
- 11. Polimorfizm ze zmiennych instancji
- 12. Kiedy rabbitmq używa przeciwciśnienia tcp?
- 13. Wyliczanie domyślnych instancji przy użyciu GHC.Generics
- 14. Czy pętle są bardziej wydajne niż pętle?
- 15. instancji zagnieżdżonych klasy statycznej przy użyciu Class.forName
- 16. Ninject Tworzenie dodatkowej instancji przy użyciu NinjectHttpModule
- 17. Skompilowanie manipulacji "ciągiem" przy użyciu szablonów zmiennych
- 18. MYSQL Aktualizacja wielu kolumn przy użyciu zmiennych
- 19. Prześmiewanie zmiennych członków klasy przy użyciu Mockito
- 20. iOS przy użyciu zmiennej instancji use lub metody getter
- 21. Wzór MVP przy użyciu formularzy internetowych i instancji obiektów DI
- 22. Włączanie argumenty konstruktora do zmiennych instancji
- 23. Szukasz bardziej elastyczne narzędzie niż tiret GNU
- 24. Dlaczego CGSize nie używa * podczas deklarowania zmiennych?
- 25. Dlaczego wskaźniki do klasy bazowej są bardziej preferowane niż odniesienia?
- 26. Łańcuchy encji przy użyciu operatora większego niż
- 27. Deklarowanie zmiennych instancji iterujących nad hash!
- 28. Umieszczanie wartości kolumn w zmiennych przy użyciu pojedynczego zapytania SQL
- 29. Przesyłanie pliku większego niż 2 GB przy użyciu PHP
- 30. Czy korzystanie z Linq do SQL jest korzystne przy użyciu podstawowych kluczy wielolumnowych (złożonych)?
Może chciał powiedzieć tak: we wszystkich punktach, 'let' korzystne jest zmienne instancji i jest zawsze bardziej korzystny niż zmiennych instancji. –