gpt4 book ai didi

ruby-on-rails - RSpec 和 Factory Girl - 日期时间字段错误

转载 作者:数据小太阳 更新时间:2023-10-29 07:58:48 26 4
gpt4 key购买 nike

我遇到了以下问题:

环境:Ruby:2.3.1 和 Rails 5.0.0.1

我正在尝试使用 RSpec 和 Factory Girl 验证日期时间字段。

我遇到了这个错误:

expected: "2016-11-11 13:30:31 UTC"  (From Factory Girl)
got: "2016-11-11T13:30:31.218Z" (From database)

我的代码:

klass_object = FactoryGirl.create(:character)
klass = Character


RSpec.shared_examples 'API GET #index' do |klass|
before { get :index, params: params, accept: Mime[:json] }


it "returns a list of #{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
...
end

工厂:

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

结束

我该如何解决这个问题?

我这样做了,它有效,但我认为它不是很好。有更好的方法吗?

    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

感谢您的帮助。

最佳答案

我可以建议您改变比较结果的方法。您可以使用基于金主思想的方法。

根据这种方法,您拍摄对象的快照,然后将对象的所有 future 版本与快照进行比较。

在您的情况下,您可以第一次编写 json fixture,检查 json 是否正确,并在下次将其与结果 json 进行比较。

例如

approved.json

[
{
"travel_time_seconds": 43200,
"available_seats_amount": 10,
"departure_at": "2016-04-08T02:00:00.000+03:00",
"arrival_at": "2016-04-08T17:00:00.000+03:00",
"source_point_name": "New York",
"destination_point_name": "Moscow",
"tickets_count": 2
}
]

controller_spec.rb

RSpec.shared_examples 'API GET #index' do |klass|
before { get :index, params: params, accept: Mime[:json] }

it "returns a list of #{klass.to_s.underscore.pluralize}" do
verify(format: :json) { json(response.body).map {|o| o.except('id', 'created_at', 'updated_at' }
end
...
end

approvals gem ,例如,可以帮助您做到这一点

关于ruby-on-rails - RSpec 和 Factory Girl - 日期时间字段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40550343/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com