2013-07-30 6 views
0

Может ли кто-нибудь объяснить это мне? Что не так?Rspec: error in should eq()

1) NetworkController GET #index for staff user locates all network latencies to display 
Failure/Error: assigns(:latencies).should eq([@lat1, @lat2, @lat3]) 

    expected: [#<NetworkLatency from_network_id: "BSC", to_network_id: "FZJ", error_status: nil, percent_packet_lost: 0, min_ping: 54.8, avg_ping: 54.8, max_ping: 54.8, created_at: "2013-07-30 19:09:14", updated_at: "2013-07-30 19:09:14">, #<NetworkLatency from_network_id: "CSC", to_network_id: "ABC", error_status: nil, percent_packet_lost: 0, min_ping: 54.8, avg_ping: 54.8, max_ping: 54.8, created_at: "2013-07-30 19:09:14", updated_at: "2013-07-30 19:09:14">, #<NetworkLatency from_network_id: "CSC", to_network_id: "DEF", error_status: nil, percent_packet_lost: 0, min_ping: 54.8, avg_ping: 54.8, max_ping: 54.8, created_at: "2013-07-30 19:09:14", updated_at: "2013-07-30 19:09:14">] 
     got: [#<NetworkLatency from_network_id: "BSC", to_network_id: "FZJ", error_status: nil, percent_packet_lost: 0, min_ping: 54.8, avg_ping: 54.8, max_ping: 54.8, created_at: "2013-07-30 19:09:14", updated_at: "2013-07-30 19:09:14">, #<NetworkLatency from_network_id: "CSC", to_network_id: "ABC", error_status: nil, percent_packet_lost: 0, min_ping: 54.8, avg_ping: 54.8, max_ping: 54.8, created_at: "2013-07-30 19:09:14", updated_at: "2013-07-30 19:09:14">, #<NetworkLatency from_network_id: "CSC", to_network_id: "DEF", error_status: nil, percent_packet_lost: 0, min_ping: 54.8, avg_ping: 54.8, max_ping: 54.8, created_at: "2013-07-30 19:09:14", updated_at: "2013-07-30 19:09:14">] 

    (compared using ==) 

    Diff: 
    @@ -1,4 +1,2 @@ 
    -[#<NetworkLatency from_network_id: "BSC", to_network_id: "FZJ", error_status: nil, percent_packet_lost: 0, min_ping: 54.8, avg_ping: 54.8, max_ping: 54.8, created_at: "2013-07-30 19:09:14", updated_at: "2013-07-30 19:09:14">, 
    - #<NetworkLatency from_network_id: "CSC", to_network_id: "ABC", error_status: nil, percent_packet_lost: 0, min_ping: 54.8, avg_ping: 54.8, max_ping: 54.8, created_at: "2013-07-30 19:09:14", updated_at: "2013-07-30 19:09:14">, 
    - #<NetworkLatency from_network_id: "CSC", to_network_id: "DEF", error_status: nil, percent_packet_lost: 0, min_ping: 54.8, avg_ping: 54.8, max_ping: 54.8, created_at: "2013-07-30 19:09:14", updated_at: "2013-07-30 19:09:14">] 
    +[#<NetworkLatency from_network_id: "BSC", to_network_id: "FZJ", error_status: nil, percent_packet_lost: 0, min_ping: 54.8, avg_ping: 54.8, max_ping: 54.8, created_at: "2013-07-30 19:09:14", updated_at: "2013-07-30 19:09:14">, #<NetworkLatency from_network_id: "CSC", to_network_id: "ABC", error_status: nil, percent_packet_lost: 0, min_ping: 54.8, avg_ping: 54.8, max_ping: 54.8, created_at: "2013-07-30 19:09:14", updated_at: "2013-07-30 19:09:14">, #<NetworkLatency from_network_id: "CSC", to_network_id: "DEF", error_status: nil, percent_packet_lost: 0, min_ping: 54.8, avg_ping: 54.8, max_ping: 54.8, created_at: "2013-07-30 19:09:14", updated_at: "2013-07-30 19:09:14">] 

Expected и got равны мне. Итак, почему Rspec сообщает об ошибке?

EDIT

  • Я использую eq
  • created_at и udated_at созданы в schema.rb по t.datetime заявления
  • NetworkLatency объекты создаются FactoryGirl следующим

    @lat1 = FactoryGirl.create(:network_latency, from_network: @bsc_net, to_network: @fzj_net)

    @lat2 = FactoryGirl.create(:network_latency, from_network: @csc_net, to_network: @abc_net)

    @lat3 = FactoryGirl.create(:network_latency, from_network: @csc_net, to_network: @def_net)

    , а затем извлекаются из БД с помощью контроллера с помощью:

    NetworkLatency.where(:from_network_id => site_ids).order('from_network_id ASC, to_network_id ASC')

+0

Вы использовали 'eq' или' equal'? –

ответ

0

Результаты испытаний указывают, что строка представление двух массивов то же самое , но это не означает, что массивы равны eq друг другу, что требует, чтобы каждый el ement равен eq соответствующему элементу в другом массиве. Знаете ли вы, что объекты одинаковы в каждом массиве? Если нет, знаете ли вы, что у объектов есть нестандартное определение ==?

0

Являются ли эти типы времени фактически строками, или они являются типом времени Ruby's? Последнее включает миллисекунды и микросекунды, которые не видны в строковом представлении; это делает представления строк равными, в то время как время может не быть.

Например:

2.0.0p0 :001 > Time.now == Time.now 
=> false 
2.0.0p0 :002 > Time.now.to_s == Time.now.to_s 
=> true 
2.0.0p0 :003 > puts "%s, %s" % [ Time.now.tv_usec, Time.now.tv_usec] 
247806, 247810 
0

Вы можете переопределить == оператора в вашем NetworkLatency CLSS:

def ==(other) 
    self.from_network_id == other.from_network_id && self.to_network_id == other.to_network_id && ... 
end 
0

попробовать

assigns(:latencies).should match_array([@lat1, @lat2, @lat3]) 

или

expect(assigns(:latencies)).to match_array([@lat1, @lat2, @lat3]) 
0

У меня была та же проблема. Я решил использовать драгоценный камень timecop. Он замораживает время, после чего вы можете выполнять сравнения, не мешая изменениям времени.

Смежные вопросы