Wann ist die Verwendung von Instanzvariablen vorteilhafter als die Verwendung von let ()?

7

Es scheint eine Menge Unterstützung für die Verwendung von let() in rspec zu geben um Variablen zu initialisieren. In einigen Fällen werden Instanzvariablen (d. H.% Co_de%) stattdessen verwendet?

    
Avery 02.01.2013, 03:39
quelle

2 Antworten

14

Ich bevorzuge immer eine Instanzvariable aus verschiedenen Gründen:

  • Instanzvariablen entstehen, wenn sie referenziert werden bedeutete, dass, wenn Sie einen Fehler in der Instanz Variablen Rechtschreibung dann machen Es würde Sie definitiv zu einigen Problemen als neue Instanzvariable führen wird auf Null initialisiert. Aber lassen Sie sich NameError holen, wenn Sie falsch schreiben.

  • Außerdem initialisieren Sie die Instanzvariablen in before Block, was bedeutet, dass vor dem Block jedes Mal ausgeführt wird a Die Spezifikation würde auch dann ausgeführt werden, wenn diese Spezifikation nicht diese Instanzvariablen verwendet Sie haben initialisiert. Beispiel unten angegeben;

    %Vor%

Obwohl alle Spezifikationen gut laufen, aber @movie nicht in der ersten Spezifikation verwendet wird und @user in der zweiten nicht verwendet wird.

Sie können auch let mit bang "!" let! , let wird langsam ausgewertet und wird niemals instanziiert, wenn Sie es nicht aufrufen. Verwenden Sie let , um einen memoisierten Helfer zu definieren, während let! vor jedem Methodenaufruf zwingend ausgewertet wird.

    
Muhamamd Awais 02.01.2013 07:12
quelle
7

Ich habe diese Frage bevorzugt, aber am Ende beantworte ich die Frage selbst.

Zuerst die Unterschiede beschreiben

Die let -Methode initialisiert die Variable nicht, bis sie im Test referenziert wird - was sie von @instance variables unterscheidet, die vom Start an initialisiert werden.

Im Allgemeinen gibt es keine große Zurückhaltung. Verwenden Sie @instance variables , wenn Sie sicherstellen möchten, dass let -Objekt initialisiert ist. Auf der anderen Seite kann dies auch mit let! gemacht werden, es gibt also keinen offensichtlichen Grund, @instance variable zu verwenden.

Zusammenfassend ist für mich der offensichtliche Grund, @instance variable über let zu verwenden, aber es gibt keinen offensichtlichen Grund, @instance variables über let!

zu verwenden

@instance variables benötigt mehr Zeit zum Laden und kann dadurch zu unerwünschter Komplexität im Code führen, die durch Verwendung von let oder let!

vermieden werden könnte

Sie können sich auch diese beiden Antworten ansehen, vielleicht gibt es Ihnen weitere Informationen:

Wann ist RSpec zu verwenden, let ()?

RSpec: Was ist der Unterschied zwischen let und a be block?

    
Aleks 26.03.2013 13:41
quelle

Tags und Links