ruby-on-rails - 测试服务类 - Rails

标签 ruby-on-rails oop unit-testing testing rspec

我想知道你们如何在 Rails 中测试服务对象类?假设用户注册了。在数据库中创建用户,将其添加到电子邮件列表中,然后发生其他事情。你如何测试这个?

class UserRegistrar
  def sign_up(user)
    User.create(user) # or something to this effect
    EmailMarketing.add_to_email_list(user)
    SuperSecretClass.do_secret_stuff(user)
    LoggingThing.new.log_stuff_about(user)
  end
end

( Controller 操作)

def create
    UserRegistrar.sign_up(params)
    # stuff for the strong params, etc...
end

我所做的只是确保使用正确的参数调用方法。这些方法的结果(例如确保用户确实添加到列表中)在各自的类中进行测试。我这样做对吗?

最佳答案

是的,如果我需要为像您展示的那样的类编写单元测试,我会按照您所说的方式进行,并使用模拟。在您的示例中,所有工作都委托(delegate)给高级模型方法,这些方法需要自己的测试,并且可能在多个地方使用,因此在测试中测试这些方法的功能是没有意义的。服务。而且mock没有那么多方法调用,所以不会太痛苦。

但是,

  • 如果这些模型方法中的任何一个仅在一项服务中使用,我会考虑将它们转移到该服务中,以精简模型并使服务更加连贯。如果我最终得到的服务方法本身完成了大量工作,而不仅仅是委托(delegate),我会在服务测试中通过创建数据库对象并断言服务如何更改它们来测试它们的功能。

  • 另一方面,如果我有一个仅委托(delegate)的服务,它可能已经通过我的验收测试进行了全面测试(因为我正在执行 BDD 并首先编写验收测试),并且不需要对服务进行单元测试。

关于ruby-on-rails - 测试服务类 - Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23829771/

相关文章:

c++ - 扩展类时的性能,组合与多态性

c# - 声明类变量 (List) 或将其发送给许多函数。什么是更好的?

unit-testing - Qt Creator 中的单元测试设置

ruby-on-rails - Docker无法在Rails捆绑软件上构建安装rake

java - Warbler 不使用 warble war 打包文件

ruby-on-rails - 任何人都有 Ruby on Rails 的 SEO 技巧

ruby-on-rails - Rails渲染json添加自定义属性

php - PHP 中的常量非修改对象引用

c# - 使用反射解析函数/方法内容

angularjs - “未定义”不是函数 - AngularJS 的 Jasmine 单元测试