有没有 Rails 工厂可以帮助我测试非持久模型?

发布于 2024-11-14 22:04:57 字数 154 浏览 4 评论 0原文

我正在开发一个 Rails 应用程序,其中的模型是普通的 ruby​​ 类,没有任何持久层(没有活动记录或类似层)。我想用一些工厂提供的所有细节来测试 RSpec 的这些模型(机械师、工厂女工)。这些模型将来可能会与持久性模型关联,或者可能实现自定义持久性模型。

有什么建议吗?

I'm working on a rails application on which the models are plain ruby classes without any persistence layer (no active record or similar). I want to test these models from RSpec with all the niceties that some factories provide (machinist, factory-girl). These models may get associations with persistent models in the future or may implement a custom persistance model.

Any suggestions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

百合的盛世恋 2024-11-21 22:04:57

我喜欢使用 Sham 宝石。只要您有一个符合一些基本实现细节的非持久模型,就应该没问题。例如,在我的 Rails 应用程序中,我将执行以下操作:

# sham/dog_sham.rb
class Dog::Sham
  def self.options
    { name: "Barney" }
  end
end

# app/models/dog.rb
class Dog < Struct.new(:name)
  def self.create options
    self.new(options[:name])
  end
end

然后在控制台中,我可以使用 sham 命令创建一个工厂 Dog:

Sham::Config.activate!
Dog.sham!
=> #<struct Dog name="Barney">

I like to use the Sham gem. As long as you have a non-persistent model that conforms to some basic implementation details you should be fine. For instance, in my Rails app I would do the following:

# sham/dog_sham.rb
class Dog::Sham
  def self.options
    { name: "Barney" }
  end
end

# app/models/dog.rb
class Dog < Struct.new(:name)
  def self.create options
    self.new(options[:name])
  end
end

Then in the console I can create a factory Dog using the sham command:

Sham::Config.activate!
Dog.sham!
=> #<struct Dog name="Barney">
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文