【发布时间】:2019-07-01 00:03:30
【问题描述】:
我想知道 RSpec 中是否存在此功能。我在调查时似乎找不到任何结果。
我想做的是可以在 Jest 测试中完成的事情,如下所示:
// This is a Jest expectation
expect(foo).toMatchInlineSnapshot()
// On the first execution of this code, the value of foo will fill in the expectation and result in something like this
expect(foo).toMatchInlineSnapshot('bar')
我希望能够通过 RSpec 测试来做到这一点。
# Here's an RSpec expectation
expect(foo).to eq({ bar: 25 })
假设我对我的代码进行了更改,这将导致 foo[:bar] 具有不同的值,但我不知道该值是什么。
目前,我需要重新运行我的测试并看到一个错误,说明类似于
Failure/Error: expect(foo).to eq({ bar: 25 })
expected: { bar: 25 }
got: { bar: 100 }
之后,我需要手动更新我的期望以使其通过。
有没有办法告诉 RSpec 自动更新期望值?
例如:
expect(foo).to eq({ bar: 25 }, {update: true})
将在运行测试后更改代码以匹配正确的值并导致以下代码替换上述预期:
expect(foo).to eq({ bar: 100 })
有没有现成的方法可以做到这一点?也许我可以使用 RSpec 运行一些命令?
spec UPDATE_EXPECTS=1
我已经看到可以根据快照进行匹配的库,但无法找到任何导致预期答案内联显示的内容。
感谢您的帮助
【问题讨论】:
-
没听说过这样的事。
-
“但我不知道那个值会是什么”——这确实是个问题。您真的知道您的代码中发生了什么吗?你怎么不知道它会产生什么?
-
值可能会从 25 变为 26,或者在将 Math.floor 更改为 Math.round 后保持 25。一次又一次地重新运行我的测试以更改 1 个值是非常乏味的。
-
我不知道这个功能。而且我不认为这是我希望在框架中拥有的。在第一次编写规范时一次性执行此操作可能很有用,但仅作为手动复制+粘贴精心挑选的(很少?)失败消息到预期中的快捷方式。拥有像
spec UPDATE_EXPECTS=1这样的命令对我来说听起来很疯狂! -
深入挖掘,tool you are describing 专为 UI 测试 而设计。在这样的测试中,定义实际期望是完全不切实际的;快照测试只有在 something 发生变化时才会失败(但您可能不知道/不在乎什么)。我们在这里谈论的是 unit 测试,这是一种完全不同的测试类别。总之,这是一个非常糟糕的主意。