【问题标题】:How would you go about testing partial, RSpec?您将如何进行部分测试,RSpec?
【发布时间】:2014-07-14 20:44:30
【问题描述】:

假设我有一个非常复杂的视图和一个非常复杂的测试规范。 我想为它添加另一个功能,我想用 RSpec 推动开发。

我想将联系人添加到 Employee 类。

在employee.html.erb 的某处我添加了一行:

#lots of data rendered so far

<%= render @employee.contacts %>

#even more here

目前我真的不知道_contact.html.erb partial 需要是什么样子。要直接从我的员工主视图规范show.html.erb_spec.rb 对其进行测试,我将不得不做很多设置来填充或模拟不同的数据库员工是从(项目、部门等)构建的。

我现在只需要测试那部分,我不关心这个员工目前所属的部门、项目和其他东西,我不想把时间花在嘲笑它们上。稍后我可能会将其添加到我的主要规范中,并创建测试整个视图所需的所有内容,而不仅仅是 jet。

您是否有任何技术或方法来创建 Employee 的实例,向其中添加一些联系人,并仅测试部分视图? 无需担心 Employee 的所有其他内容。

IGEL 答案更新:

我同意你的观点,对 expect(...).to receive(:render) 的测试对于请求规范来说是 100% 足够的,如果我已经有了部分模板,我就不会再进一步​​了。 我只是想走极端,通过 RSpec 驱动我的 div 和 span。不测试新功能的行为,但它看起来。你认为它不值得吗?

我根本不测试视图(结构),但我看过一些文档,例如 Rails Tutorial,其中 Michael 不仅测试行为,还测试结构。我想我会试一试:)

【问题讨论】:

    标签: ruby-on-rails rspec


    【解决方案1】:

    正确的答案是避免非常复杂的视图。如果视图中几乎没有逻辑,那么可能不需要对其进行测试。将逻辑提取到presenters,这样更容易测试。我不会用视图测试来测试我的视图,因为维护它们通常没有什么乐趣。一些功能规范在这里给了我足够的安全性。

    如果您仍想对其进行测试,您可能会期望 render 被调用时使用了预期的参数:

    expect(view).to receive(:render).with(@employee.contacts)
    

    不确定该视图是否可通过view 获得。

    PS:不要只避免写复杂的视图,避免复杂的代码。这真的很难,但也绝对值得花时间。几乎每个开发人员都可以拼凑出一些可能有效的东西,但是创造一些易于理解和改变的东西将帮助包括你未来的你在内的每个人。读取代码的频率是编写/更改代码的十倍,因此我们必须对此进行优化。

    我没有时间写一封短信,所以我写了一封长信。 ——马克吐温

    【讨论】:

    • 我更新了一个问题,说明我为什么要测试它。
    猜你喜欢
    • 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
    相关资源
    最近更新 更多