【问题标题】:Replacing rails controller tests for integration test should always persist to db?替换集成测试的rails控制器测试应该始终持续到数据库吗?
【发布时间】:2017-12-28 00:16:14
【问题描述】:

我正在寻找与测试流程相关的 Rails 集成测试,我对用集成测试替换控制器测试(在 rails 5 中已弃用)的行业标准有一些疑问。

通常我们有微型控制器,我们可以在其中获取参数、调用正确的协作者并准备响应,并且可以通过直接在控制器对象上模拟协作者来轻松测试它。

我担心将每个控制器测试迁移到持久化数据库的集成测试的开销。本案的标准是什么?

只测试一个路由/动作而不是完整流程时的标准是什么?

我们如何替换它?:

@controller.stubs(:authenticate).returns(true)

【问题讨论】:

    标签: ruby-on-rails integration-testing ruby-on-rails-5


    【解决方案1】:

    集成测试旨在模拟真实用户。它们旨在完整地测试整个应用程序。

    人们对这意味着什么意见不一。对我来说,这意味着你应该完全避免存根/嘲笑。没有一件事情被存根或嘲笑,一切都被完整地执行了。这意味着我编写的每个集成测试都要经过输入用户名和密码的实际身份验证过程。有些步骤是多余的,是的。

    集成测试比单元/控制器测试慢。从长远来看,取消身份验证步骤可能不会为您节省足够的时间来有所作为(没有双关语)。

    【讨论】:

    • 感谢您的回答!同意一切。身份验证和存储用户不会有所作为,但是在将控制器测试迁移到集成测试时(如 Rails 5 中所建议的)将每个模型存储在 db 中会产生很多开销。您是否进行了 Rails 集成测试,将每个控制器操作的所有内容都存储到数据库中??
    • @Jorge 我使用fixtures/factories 仅创建当前测试所需的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多