2011-07-28 10 views
11

Jest to metoda, która skutkować Chcę sprawdzić:Zaokrąglanie problem z testów RSpec przy porównywaniu tablice pływaka

result.should == [1.0,2.0,3.0] 

ale pojawia się błąd:

expected: [1.0, 2.0, 3.0] 
     got: [1.0, 2.0, 3.0] (using ==) 

myślę, że problem zaokrąglania ale nie wiem, jak je porównać, na przykład z odchyleniem 0,1.

Dziękuję, bezdechu. pisałem własne dopasowywania, jeśli to pomoże ktoś:

RSpec::Matchers.define :be_closed_array do |expected, truth| 
    match do |actual| 
    same = 0 
    for i in 0..actual.length-1 
     same +=1 if actual[i].round(truth) == expected[i].round(truth) 
    end 
    same == actual.length 
    end 

    failure_message_for_should do |actual| 
    "expected that #{actual} would be close to #{expected}" 
    end 

    failure_message_for_should_not do |actual| 
    "expected that #{actual} would not be close to #{expected}" 
    end 

    description do 
    "be a close to #{expected}" 
    end 
end 

Odpowiedz

13

Zastosowanie:

.should be_close 

Albo nawet:

.should be_within 

Ref tutaj http://rubydoc.info/gems/rspec-expectations/2.4.0/RSpec/Matchers

+0

Dziękuję, wiem o te metody, ale nie wiem, jak zastosować je do tablicy. Mam iterować każdą wartość? Ponieważ ten wynik wiersza.może be_close ([1,0,2.0,3.0], 0,1), nie działa. – zolter

+1

Mmmm ... Nie wiem. Lepiej stwórz własny matcher, to całkiem proste – apneadiving

+1

Ponieważ RSpec 3 jest zaimplementowane tylko 'be_within': http://www.rubydoc.info/gems/rspec-expectations/3.1.0/RSpec/Matchers#be_within-instance_method vs http://www.rubydoc.info/gems/rspec-expectations/2.4.0/RSpec/Matchers#be_close-instance_method – Raf

Powiązane problemy