gpt4 book ai didi

ruby - 在 ActiveRecord 测试装置中配置 fixture_path

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

我正在使用 ActiveRecord 和 Sinatra 而不是 Rails,我想在我的测试中使用固定装置。 ActiveRecord's FixtureSet 的文档说你必须使用 fixture_path 来告诉它 fixture 文件在哪里:

placed in the directory appointed by ActiveSupport::TestCase.fixture_path=(path)

我如何写入该设置?我尝试了 @fixture_path@@fixture_path,但是当 FixtureSet 试图读取它时,它们都留下了值 nil。

这是我唯一可以开始工作的东西,但它不可能是正确的:

# test_helper.rb
require_relative '../app'
require 'minitest/autorun'
require 'active_record'

ActiveRecord::Base.establish_connection(:test)

#Set up fixtures and such
class ActiveSupport::TestCase
include ActiveRecord::TestFixtures
include ActiveRecord::TestFixtures::ClassMethods

class << self
def fixtures(*fixture_set_names)
self.fixture_path = 'test/fixtures'
super *fixture_set_names
end
end

self.use_transactional_fixtures = true
self.use_instantiated_fixtures = false
end

完整的源代码发布为 small demo project适用于 ActiveRecord 和 Sinatra。

最佳答案

我试图将此作为对您的回答的评论,但它太长了,所以我想我可以把它放在一个答案中。

@fixture_path@@fixture_path 不起作用的原因是fixture_path 是一个ActiveSupport class attribute ,它类似于 Ruby attr_accessor,只是它被定义为类中的单例方法。您可以在 ActiveRecord::TestFixtures module source 中看到使用 class_attribute :fixture_path 定义 fixture_path 属性的位置| .

类属性是 ActiveSupport 的一部分,而不是 Ruby 的原生属性。您可以在 Active Support Core Extensions 中阅读更多关于它们的信息Rails 指南和 API docs ,看看 class_attribute 是如何工作的 in the Rails source .如你看到的,该值存储在实例变量 "@#{name}"(例如 @fixture_path)中,但这发生在单例方法中,这意味着它是一个实例变量单例类,您只能从单例类中访问它。

虽然这一切都没有实际意义,因为属性的要点(如果这对您来说是旧新闻,请随意忽略它)是它们允许您将实例变量保持私有(private)并更改您的实现,而不会破坏子类化的代码或包含您的代码。当存在属性读取器或写入器时,您应该始终使用它而不是直接访问实例变量,因为在某些时候实现可能会发生变化并且属性方法可能被逻辑更复杂的方法替换,直接访问实例变量将不再产生与使用属性读取器和写入器相同的结果。

正如您所发现的,您需要使用 self.fixture_path = 而不是 fixture_path = 因为在后一种情况下,Ruby 假设您想要分配给局部变量。

关于ruby - 在 ActiveRecord 测试装置中配置 fixture_path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35046327/

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