【问题标题】:Refactoring test with shoulda, the minitest way用 shoulda 重构测试,最简单的方法
【发布时间】:2020-07-27 14:59:16
【问题描述】:

我正在浏览应该匹配器和上下文以重构一些文本并使它们更简洁和可读,但是彻底,我找不到如何具体测试的文档:

(我正在关注 Hartl 教程,我正在尝试以 Minitest 方式重构,而不是 Rspec

micropost_model

default_scope -> { order(created_at: :desc) }

has_one_attached :image

&

validates :image,   content_type: { in: %w[image/jpeg image/gif image/png],
                                      message: 'must be a valid image format' },
                    size: { less_than: 5.megabytes,
                            strong textmessage: 'should be less than 5MB' }

这个:

user_test

user_model

attr_accessor :remember_token, :activation_token, :reset_token

before_save   :downcase_email
before_create :create_activation_digest

这个:

routes

  resources :account_activations, only: [:edit]
  resources :password_resets,     only: %i[new create edit update]
  resources :microposts,          only: %i[create destroy]
  resources :relationships,       only: %i[create destroy]

【问题讨论】:

  • Hartl 的 rails 教程是关于如何从不编写测试的非常好的指南。真的是太可怕了。尤其是地毯轰炸验证测试。您要测试的行为到底是什么?请在问题正文中包含被测代码和测试本身,因为链接可能并且将会中断。
  • 在这个特定的例子中,测试很糟糕,因为测试的整个排列部分都隐藏在夹具文件中。任何重构都应该真正从安排、行动、断言开始,而不仅仅是使用 shoulda 给猪化妆。
  • @max,我对 Rails 并不陌生,但我是按照他的教程来学习如何编写测试的,但后来我发现了有关 Shoulda,我认为它更简洁易读,举个例子,你如何用Shouda以Minitest方式测试路由的资源?

标签: ruby-on-rails ruby testing minitest shoulda


【解决方案1】:

一般来说,您可以通过以下方式测试您发布的作品:

  • 应该匹配器将soon 有一个have_one_attached 匹配器,您可以使用它来测试has_one_attached
  • 您为 Micropost 发布的验证来自 Paperclip 和 Paperclip provides matchers you can use in your tests
  • 您可以使用 Shoulda 中的验证匹配器代替 user_test 中的前几个测试 - 例如,should validate_presence_of(:email)should validate_length_of(:email).is_at_most(255) 等。
  • 应该不提供任何工具来测试与身份验证或回调相关的代码 - 您必须查看您的用户模型正在做什么并围绕逻辑手动编写测试。从您发布的代码 sn-p 来看,这可能包括创建模型实例、设置一些属性、保存模型以及断言某些属性已设置。
  • 有一种方法可以使用 route 使用 Shoulda 测试路线。关于这一点,我会说,在编写集成或系统测试时,您可能会在每次测试中获得更好的里程数,该测试会练习可通过路由访问的功能,而不是直接测试路由。但是,如果您想要那种粒度级别,那么至少有那个匹配器。

希望对您有所帮助 - 如果您需要更多帮助,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多