denke ich, ein guter Weg, um diesen Ansatz ist, das Zeug vorausgesetzt, Sie mit let
ist dynamisch, hat eine private Funktion in Ihrem Testfall, der den Wert berechnet Sie benötigen binden würden.
defmodule MyModuleTest do
use ExUnit.Case
test "timestamp is a tuple" do
assert is_tuple(my_var())
end
defp my_var() do
:os.timestamp()
end
end
RSpec des let
gibt Ihnen auch das Caching des Wertes es berechnet; Sie könnten dies durch die Verwendung der process dictionary tun, aber das ist in der Regel abgeraten. sehr leicht erreichbar in dem Test in einer Variablen nur durch Speicher das Ergebnis in jedem Fall ist diese gecached mit:
test "timestamp is a tuple" do
my_var = my_var()
assert is_tuple(my_var)
# other stuff that uses my_var
end
Es ist etwas ausführlicher, aber enorm weniger „Magie“ und explizit :).
Wenn Sie Testfälle "verfassen", werden auch die in den "Vorfahren" -Fällen definierten "Setup" -Fälle aufgerufen. Schauen Sie sich an, wie der Standard 'ConnCase' von Phoenix definiert wird, um zu sehen, was ich meine. Damit können Sie erreichen, was wir in 'rspec' erhalten, indem wir' lets' und Context-Blöcke verschachteln. –