2015-05-09 9 views
7

mam spec metodę, która zwraca znacznik czasu obiektu ActiveRecord.CircleCI: Błąd z spec udziałem znaczniki czasu

spec przechodzi na miejscu, ale gdy jest prowadzony na CircleCI, istnieje niewielkie niedopasowanie między przewidywanym a rzeczywistym.

spec wygląda mniej więcej tak:

describe '#my_method' do 
    it 'returns created_at' do 
    object = FactoryGirl.create(:something) 
    expect(foo.bar(object)).to eq object.created_at 
    end 
end 

Podczas przechodzi lokalnie, na CircleCI, ja ciągle się podobne komunikaty o błędach.

Oto przykłady:

(1)

expected: 2015-05-09 10:42:59.752192641 +0000 
got: 2015-05-09 10:42:59.752192000 +0000 

(2)

expected: 2015-05-08 10:16:36.777541226 +0000 
got: 2015-05-08 10:16:36.777541000 +0000 

Z błędu, podejrzewam, że CircleCI jest zaokrąglanie wartości datownika, ale robię nie ma wystarczających informacji. Jakieś sugestie?

+0

Najlepiej zgłosić ten problem do personelu pomocniczego Koło CI; są prawdopodobnie lepiej przygotowani do wyjaśnienia tego, co się dzieje. –

Odpowiedz

4

ja napotykają ten sam problem i mają obecnie otwarty bilet z CircleCI aby uzyskać więcej informacji. Zaktualizuję tę odpowiedź, gdy dowiem się więcej.

W międzyczasie obejście problemu polegające na przejściu tych testów ma na celu upewnienie się, że znacznik czasu, z którym pracujemy w takim teście, jest zaokrąglany za pomocą biblioteki, która kpi czas (np. timecop).

describe '#my_method' do 
    it 'returns created_at' do 
    # CircleCI seems to round milliseconds, which can result in 
    # slight differences when serializing times. 
    # To work around this, ensure the millseconds end in 000. 

    Timecop.freeze(Time.local(2015)) do 
     object = FactoryGirl.create(:something) 
     expect(foo.bar(object)).to eq object.created_at 
    end 
    end 
end 

UPDATE: Na podstawie wstępnej odpowiedzi od CircleCI, powyższe podejście jest faktycznie ich zalecane podejście. Nie byli w stanie dać mi wyjaśnienia, dlaczego tak naprawdę dzieje się zaokrąglanie.

UPDATE 2: Wygląda na to, że ma to coś wspólnego z różnicą między różnymi systemami. Ja osobiście widząc ten problem na OS X. Oto odpowiedź od Koła:

Z tego co wiem, Time.now rzeczywiście ma inny precyzję na OS X i komputerów z systemem Linux. Ja przypuszczam, że dostaniesz dokładnie to samo wynik na innych hostach Linux, ale wszyscy gospodarze OS X daje wynik bez zaokrągleń. Mogę się mylić, ale pamiętam, że rozmawiałem o tym z innym klientem o . Umysł sprawdzania, czy w instancji VM lub EC2 z systemem Linux?

W polu Czas można wyszukiwać dokładność na stronie - metoda rundy może w rzeczywistości dostosować precyzję. Czy byłoby to możliwe, aby zaokrąglić czas w asercji w teście?

nie próbowałem ich sugestie jeszcze potwierdzić, ale to wydaje się stanowić wyjaśnienie, jak również dodatkowego obejścia (zaokrąglania twierdzenie, w ramach testu), który nie wymaga timecop.

+1

zamrażanie czasu w dół do usec nie działa dla mnie. Skończyło się przejście na rspec matcher 'be_within' –

Powiązane problemy