gpt4 book ai didi

ruby-on-rails - RSpec 助手规范模拟 ActiveRecord

转载 作者:行者123 更新时间:2023-12-04 18:00:49 24 4
gpt4 key购买 nike

我正在使用 RSpec 进行测试。我经常发现很难编写好 helper 规范。这是一个例子:

app/helper/time_helper.rb 我有以下代码:

# Returns a text field built with given FormBuilder for given attribute                        |  ~                                                                                                    
# (assumed to be a datetime). The field value is a string representation of | ~
# the datetime with current TimeZone applied.
def datetime_timezone_field(form_builder, attribute)
date_format = '%Y-%m-%d %H:%M'
datetime = form_builder.object.send(attribute)
form_builder.text_field attribute,
value: datetime.in_time_zone.strftime(date_format)
end

测试时,我需要将 FormBuilder 传递给该方法。我知道如何创建 TestView 但如何创建下面使用的 TestModel ?在我的规范文件 (spec/helpers/time_helper_spec.rb) 中,我有类似的内容:

describe '#datetime_timezone_field' do
class TestView < ActionView::Base; end

let(:form_builder) do
ActionView::Helpers::FormBuilder.new(TestModel.model_name.singular,
TestModel.new,
TestView.new,
{})
end

it # Some tests here to check the output...
end

我的问题是 TestModel。我如何模拟这样的对象?此助手未连接到我的应用程序中的模型。 TestModel 在我的应用程序中应该是“任何模型类”。或者有没有更好的方法来编写辅助方法来摆脱这个问题?

最佳答案

无论如何,您实际上并不是在测试模型的行为,您只需要一个对象来响应您传入的属性。

我以为你能做到

class TestModel
include ActiveModel::Model

attr_accessor :whatever_attribute
end

您可能不需要所有的 ActiveModel,但我不知道表单生成器需要它的哪些部分。您可以随时查找这些内容。

所以基本上你会做

let(:form_builder) do
ActionView::Helpers::FormBuilder.new(TestModel.model_name.singular,
TestModel.new(whatever_attribute: Time.zone.now),
TestView.new,
{})
end

我没有对此进行测试,但我看不出有任何原因它不应该工作。

关于ruby-on-rails - RSpec 助手规范模拟 ActiveRecord,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35652386/

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