W metodzie sterownika ustawiam zmienną użytkownika activation_sent_at
równą Time.zone.now
, gdy wiadomość aktywacyjna jest wysyłana do tego użytkownika. Na serwerze programistycznym to wydaje się działać (chociaż wyrażenia czasu w mojej aplikacji są 2 godziny opóźnione w czasie lokalnym mojego komputera).Test integracji TimeWithZone i Time.zone.now kończy się niepowodzeniem.
Chcę dołączyć test integracyjny, który sprawdza, czy rzeczywiście ustawiono activation_sent_at
. Więc zawarte linię:
assert_equal @user.activation_sent_at, Time.zone.now
to jednak wywołuje błąd:
No visible difference in the ActiveSupport::TimeWithZone#inspect output.
You should look at the implementation of #== on ActiveSupport::TimeWithZone or its members.
myślę, że to sugeruje użyć innego wyrażenia dla Time.zone.now
w moim teście. Przyjrzałem się różnym źródłom, w tym http://api.rubyonrails.org/classes/ActiveSupport/TimeWithZone.html, ale nie jestem pewien, co tutaj zrobić. Wszelkie sugestie, co może być przyczyną tego błędu?
Dodatkowe informacje: Dodanie puts Time.zone.now
i puts @stakeholder.activation_sent_at
potwierdza, że dwa są równe. Nie wiem, co generuje błąd/błąd.
Co zabawne, Timecop był pierwszym wybawcą, o którym myślałem, kiedy napotkałem ten problem, ale to nie pomogło. Zabawny. – bbozo
Problem polega na tym, że nawet jeśli zamrażasz czas, to nie pomaga - prawdopodobnie z powodu jakiegoś nieskończenie małego dryfu, że nie można wiarygodnie porównać żadnej arytmetyki. Jednakże, kiedy ustawiam czas na konkretny moment mojego wyboru z milisekundami zaokrąglonymi, wyłączonymi, to działa, tzn. 'Timecop.freeze' zawiedzie i' Timecop.freeze Time.parse ("2016-09-13 18:26 : 09 +0200 ")' works' – bbozo
Po aktualizacji odpowiedzi udzielę +1 – bbozo