Je suis confronté au problème suivant :
Environnement : Ruby: 2.3.1 et Rails 5.0.0.1
J'essaie de valider un champ datetime avec RSpec et Factory Girl.
J'ai obtenu cette erreur :
attendu : "2016-11-11 13:30:31 UTC" (De Factory Girl)
obtenu : "2016-11-11T13:30:31.218Z" (De la base de données)
Mon code :
klass_object = FactoryGirl.create(:character)
klass = Character
RSpec.shared_examples 'API GET #index' do |klass|
before { get :index, params: params, accept: Mime[:json] }
it "renvoie une liste de #{klass.to_s.underscore.pluralize}" do
object_array = json(response.body)
klass_attributes = klass.attribute_names.without("id", "created_at", "updated_at").map(&:to_sym)
klass_attributes.each do |attribute|
object_array.each do |object|
expect(object[attribute].to_s).to eq(klass_object[attribute].to_s)
end
end
end
...
Factory :
FactoryGirl.define do
factory :character do
marvel_id { Faker::Number.number(6).to_i }
name { Faker::Superhero.name }
description { Faker::Hipster.paragraphs(1) }
modified { Faker::Date.between(DateTime.now - 1, DateTime.now) }
factory :invalid_character do
id ''
name ''
marvel_id ''
modified ''
end
end
fin
Comment puis-je corriger ce problème ?
J'ai fait cela, ça fonctionne mais je pense que ce n'est pas la meilleure façon de le faire. Y a-t-il une meilleure façon de le faire ?
object_array.each do |object|
if ActiveSupport::TimeWithZone == klass_object[attribute].class
expect(object[attribute].to_datetime.strftime("%Y-%m-%d %H:%M:%S")).to eq(klass_object[attribute].to_datetime.strftime("%Y-%m-%d %H:%M:%S"))
else
expect(object[attribute].to_s).to eq(klass_object[attribute].to_s)
end
end
Merci pour votre aide.