gpt4 book ai didi

ruby-on-rails - 在 Rails 中自动测试模型

转载 作者:行者123 更新时间:2023-11-28 21:04:34 25 4
gpt4 key购买 nike

我只是手动发现了一个迁移错误。我向模型添加了一个新字段,但忘记将其添加到 Controller 的 model_params 方法中。因此,新字段不会持久保存到数据库中。

一旦我注意到这个问题就很容易修复,但这让我想知道是否有办法在测试中检测到这个问题。我会想象像 gem 这样的东西,它会解析模式并生成一组测试,以确保可以写入所有字段并可以读回相同的数据。

这是可以(或已经)完成的事情吗?到目前为止,我的搜索让我读到了很多有趣的读物,但还没有找到像这样的珍宝……

最佳答案

可以写你想写的。遍历模型中的所有字段,生成反射(reflect)这些字段的参数,然后在您的 Controller 上运行功能测试。问题是测试很脆弱。如果您实际上不希望所有字段都可以通过参数写入怎么办?如果您在标准模式之外的另一个 Controller 中引用模型怎么办?您将如何处理生成可通过不同验证的数据?您要么必须确保您的应用程序仅以特定方式编写,要么该测试将变得越来越复杂以处理额外的边缘情况。

我认为测试的解决方案是尽量保持简单;意识到您已经对系统进行了更改,并且由于该更改,需要更新相应的测试。在这种情况下,您将更新受该模型影响的功能测试和单元测试。如果您严格遵守测试驱动设计,您实际上会首先更新测试以生成失败的测试,然后实现更改。因此,希望更新后的功能测试在这种情况下会失败。

在测试之外,您可能需要查看 linter。本质上,您是在询问是否可以捕获传递给对象方法的参数与签名不匹配的错误。这在完全解析代码(即在静态类型环境中编译)时更容易捕捉。

编辑 - 我跳过了 linting 的一个步骤,因为您还必须以某种方式编写代码,以便 linter 能够捕获它,例如更明确地传递给它的方法和参数。

关于ruby-on-rails - 在 Rails 中自动测试模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35857804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com