view - 测试: How to test that view contains desired data

标签 view tdd integration-testing bdd

假设厨师可以制作食谱,而副厨师长可以制作必须由主厨批准的食谱。

您想测试一下,当主厨查看她的主页时,她会看到她自己创建的食谱。您还想测试她是否看到有等待她批准的食谱。

我可以想到两种方法来做到这一点:

  • 测试 View 是否包含某些字词,例如“您的食谱”和“正在等待您批准的食谱”
  • 为您正在使用的 html 元素添加不必要的属性,以便您可以检查具有“id=recipe_1”或“data-for-the-sake-of-testing=1”的元素

  • 我非常不喜欢这两种方法。

    为什么方法#1很烂
  • 令人难以置信的脆弱测试。每次您想对副本进行小幅更新时,测试都会中断。
  • i18n?这种方法将如何发挥作用?

  • 可能还有更多原因,但这两个是相当大的。

    为什么方法#2很烂

    仅仅为了测试而有多余的标记是多么烦人!用户不应该为了测试而增加下载大小。

    对此有什么好的方法?我很想听听任何替代方案,无论您使用哪种语言。我主要使用 Ruby、Test::Unit、Minitest、RSpec 和 Cucumber(尽管我的 Cuke 技能已经过时),但如果其他语言/框架弄清楚了,我也很想看看他们在做什么。

    最佳答案

    使用页面范例。

    尽可能以人性化的方式表达这些步骤,尽可能在能力级别(高级),并使用具体示例。例如,如果我使用 Cucumber,我可能会说:

    Given the sous-chef has created a recipe for Frog Pie
    When the chef looks for recipes to approve
    Then the recipe for Frog Pie should be in the list.



    在这些步骤的代码中,实例化或查找您要查找的特定页面,其中该页面是表示页面功能的对象。然后,该页面可以包含用户可以对该页面执行的所有操作 - 查找食谱、批准食谱、移动到另一个页面等。

    这样,如果您需要更改步骤的底层代码,您只需在一个地方更改它,特定页面的所有更改都会一起进行。因为您已经根据您要交付的功能来表述该场景,所以该场景不太可能需要进行太多更改(除非您发现您的业务需要与您所交付的功能不同的功能)。

    这对于基于窗口的应用程序也很有效,每个小部件或模块都是一个特定的页面。

    有额外的 id 只是为了测试也很好。有时设计师也喜欢使用它们。

    关于view - 测试: How to test that view contains desired data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10660149/

    相关文章:

    Android ListView 选中项高亮显示

    sql - PostgreSQL 更新未按预期工作

    Android 水平滚动条正在剪切文本

    c# - FakeItEasy 的 Out 和 Ref 参数

    python - 使用 Django 在用户注册时填写用户个人资料

    java - stub 方法时出现 InvalidUseOfMatchersException

    c# - 为未暴露给 UI 的方法编写测试 - 需要一般帮助

    angularjs - 使用 Protractor 多功能配置运行 e2e 测试,但限制最大 Webdriver 实例

    Java,Junit - 捕获标准输入/输出以用于单元测试

    typescript - Cypress 浏览器状态保持登录状态。如何阻止这种情况发生?