我正在尝试测试一个相当大的 Rails 应用程序,我可能一直都应该这样做,但从来没有完全适应过。现在我正在进行功能测试以查看是否成功创建了用户。基本上,我想测试一些东西:
- 用户是否被保存(即,如果数据库中有新记录)
- 他的信息(姓名、电子邮件等)是否正确
- before_create 是否有几个字段已自动添加到数据库中
- 是否发送了电子邮件
- 电子邮件文本是否合适(即替代电子邮件模板中的用户名和激活链接)
据我了解,单元测试旨在测试模型,功能测试应该测试控制器。我上面提到的几个测试应该是单元测试,正如我所看到的 - 具体来说,我认为我可以确保输入正确映射到数据库字段,并且 before_create 过滤器在使用用户模型的单元测试中工作。
其他人似乎要求进行功能测试——是否发送了电子邮件(可能还有它的文本——尽管这可能属于 UserEmail 测试?)以及是否有新记录。
这是关于模拟/存根的问题。在用户控制器功能测试中,我应该确保使用适当的参数调用 user.save,还是应该测试数据库是否获得新记录?前者似乎需要一个存根,并假设,由于 Rails 已经过很好的测试,如果在用户模型上调用 .save,对象将被成功保存。但后者(例如,调用 assert_difference)感觉更彻底。选择哪个?
抱歉,如果这个问题涉及太多了——我知道这是一个很大的话题,但我希望理解这样一个特定的(如果很长)示例将在总体上澄清很多关于测试的内容。
谢谢!