我想知道你们如何在 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/