测试:如何测试视图包含所需的数据

2024-01-03

假设厨师可以制作食谱,副厨师可以创建必须经过主厨批准的食谱。

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

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

  1. 测试视图是否包含某些单词,例如“您的食谱”和“等待您批准的食谱”
  2. 将不必要的属性添加到您正在使用的 html 元素中,以便您可以检查带有“id=recipe_1”或“data-for-the-sake-of-testing=1”的元素

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

为什么方法#1 很糟糕

  1. 令人难以置信的脆弱测试。每次您想要对副本进行较小的更新时,测试都会中断。
  2. 国际化?这种方法将如何发挥作用?

可能还有更多原因,但这两个原因相当重要。

为什么方法#2 很糟糕

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


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


使用页面范例。

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

鉴于副主厨创造了青蛙派的食谱
当厨师寻找需要批准的菜谱时
那么青蛙派的食谱应该在列表中。

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

这样,如果您需要更改该步骤的底层代码,您只需在一处进行更改,并且特定页面的所有更改都将集中在一起。因为您已经根据要交付的功能来描述场景,所以不太可能需要对场景进行太大更改(除非您发现您的业务需要与您要交付的功能不同的功能)。

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

拥有额外的 id 来进行测试也很好。有时设计师也喜欢使用它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

测试:如何测试视图包含所需的数据 的相关文章

  • 测试驱动开发 - 我应该测试数据库列和索引吗?

    我是 TDD 新手 我发现shouldagem 能够测试数据库实体的列是否存在以及测试其索引 但是否有必要在我的测试套件中包含列和索引的测试 我是否需要担心在开发过程中可能会删除任何列和索引 不要测试数据库列 这只是测试实施 不要测试实现
  • ViewPager 的 Android Viewholder

    您好 我正在使用 ViewPager 但我现在想保留状态 而不是重新生成单元格 我注意到 viewpager 与 listviews 的自定义适配器非常相似 它们的功能类似 listview 在单元格不再出现在屏幕上后重新生成单元格中的数据
  • RubyMine 不能使用 Guard 吗?

    由于某些无法解释的原因 RubyMine 会自动保存您所做的每一个更改 因此每次击键都会触发 Guard 运行您的测试 最可笑的是 显然没有办法禁用这个自动保存 功能 我只是想知道 RubyMine 似乎是 Rails 开发人员中非常流行的
  • Drupal 视图 - 自定义/修改 SQL

    我遇到了 配置文件复选框 模块的问题 该模块存储以逗号分隔的自定义配置文件字段 问题是我是否创建一个视图来按值过滤 SQL 结果最终是这样的 AND profile values profile interests value in Bus
  • 使用控制器通过 codeigniter 处理返回的自定义 css 和 javascript 文件

    我正在开发一个 php codeigniter 项目 我正在考虑创建一个专门用于处理返回自定义 css 和 javascript 文件的控制器 在之前的项目中 我在视图文件的标头中包含了外部 CSS 和 JS 文件 但它们本质上必须是静态的
  • 使用 jasmine 在 angularJS 中注入服务来测试控制器

    我想了解如何使用 jasmine 和 angularJS 测试我的代码 我编写了一个带有控制器和注入服务的测试项目 现在我想测试控制器并尝试模拟注入的服务 但我没有找到一种方法来测试我的控制器的 到达 功能 这是我的jsfiddle htt
  • Android:我可以创建一个不是矩形的视图/画布吗?圆形的?

    我有一个圆形视图 悬停在主要内容上方 gt 从屏幕出来的 z 轴方向 当有人点击屏幕时 我希望选择主要内容或悬停在上方的视图 当它覆盖主视图时 到目前为止效果很好 我在透明画布上有一个圆形物品 这意味着您可以看到该圆圈之外的背景的所有内容
  • Python 是否有首选的 BDD 风格单元测试框架?

    我想知道是否有任何 BDD 风格的 描述它 Python 单元测试框架可以维护并准备好投入生产 我已经发现describe https pypi python org pypi describe 0 1 2 但似乎没有维护 也没有文档 我也
  • “引起:java.lang.RuntimeException:视图必须有标签”的实际含义是什么?

    如果知道想要什么标签 请告诉我 Caused by java lang RuntimeException view must have a tag BaseActivity java Override public void setCont
  • RSpec 无法从 Factorygirl 中找到工厂

    我将在 Rails3 项目中将 RSpec 与 Factory Girl 一起使用 我已经安装了 Factory Girl 但它找不到工厂我有这个错误 Failure Error Factory build user should be v
  • 如何对私有方法进行单元测试?

    我正在构建一个类库 它将有一些公共和私有方法 我希望能够对私有方法进行单元测试 主要是在开发时 但它也可能对未来的重构有用 这样做的正确方法是什么 如果您想对私有方法进行单元测试 则可能会出现问题 单元测试 一般来说 旨在测试类的接口 即其
  • 在 iOS 上,边距、边缘插入、内容插入、对齐矩形、布局边距、锚点...之间有什么区别?

    iOS 社区中似乎有几种不同的选项 术语 人们在布局方面使用 例如 UIEdgeInsets 是一种类型 但有时我听到 读到 设置插图 或布局边距与布局指南 我总是能够找到有效的选择 但我永远不确定我是否使用了正确的工具来完成这项工作 有人
  • 是检测异常并抛出它们还是让运行时抛出它们更好?

    假设有这样的设置 public class MyClass public void DoSomething string Data if String IsNullOrWhiteSpace Data throw new NullRefere
  • 集成测试和单元测试(WEB API mvc 4)

    集成测试和单元测试与 APIController 测试有何关系 在集成测试中创建 Web 请求时如何模拟存储库 以便它不会对数据库进行实际查询 您可以使用自托管 http code msdn microsoft com ASPNET Web
  • 正确的单元测试技术

    在使用 TDD 时 我发现自己需要测试一个包含查找值的常量 最终 哈希图 请查看更新中出现这种情况的原因 见下文 private static final Map
  • 如何在 Rails 中格式化日期时间?

    在我的 Rails 视图中 我有以下显示日期时间的代码 该行的结果如下 2013 02 02 01 00 00 UTC 我该如何更改它 使其显示为 2 2 13 X 00 PST 使用红宝石的strftime 关于日期 日期时间 看一下文档
  • 使用 mocha/chai 确保 REST API 提供文件?

    我想验证对 REST API 端点之一的调用是否正在提供文件 但我不确定如何进行操作 并且我没有看到任何相关示例 我确实看过文档 http chaijs com api bdd 但这对我没有多大帮助 服务器端代码本质上是 在 Express
  • 推送/呈现模态视图控制器

    我的视图控制器中有一个表 我们称之为 TVC1 我使用了 TVC1 中的行 以便用户除了 TVC1 上的数据之外还可以输入更多数据 因此 当有人点击 TVC1 中的特定行时 它将显示另一个视图控制器 我们称之为 TVC2 然而 当显示TVC
  • Kohana 3.1 中的模板

    我几个月前就用过它们 然后我改用燃料 然后我又切换回 Kohana 问题 我忘记了如何正确使用模板 我的意思是Controller Template 有教程 http kohanaframework org 3 1 guide kohana
  • Navicat 中的 MySQL 视图 - 如何定义“主键”?

    当我在 Navicat 中定义视图时 经常会收到以下消息 xxx 没有主键 对此表的更新将使用以下伪语句完成 UPDATE xxx SET ModifiedFieldsAndValues WHERE AllFieldsAndOldValue

随机推荐

  • Shell 脚本错误:“head:无效的尾随选项 -- 1”

    我的 shell bash 脚本中有这段代码 用于将文件分割成更小的部分 for i start i lt lineCount i i interval do temp expr i interval if temp le lineCoun
  • NavigationStack 可搜索 .focused

    当用户单击搜索框以满足条件 显示另一个视图 时 我需要进行配置 一旦他单击 取消 以显示原始视图 已经可以通过 onChange of searchText value in if value isEmpty 进行测试 Navigation
  • Rails uglifier 应该 uglify (mangle) 函数名称吗?

    我的 js 文件被压缩并且变量被破坏 但函数名称在 Heroku 上没有被破坏 运行最新的 Rails 3 2 8 和最新的 uglify 1 3 0 gem 根据https github com lautis uglifier usage
  • 卡夫卡消费者寻求开始

    我没有使用分区来发布到 Kafka 主题 ProducerRecord 字符串主题 K键 V值 在消费者方面 我想从头开始 eekToBeginning 集合分区 是否可以在不使用分区的情况下寻求开始 Kafka 是否分配默认分区 http
  • 如何使 qtip 工具提示随光标移动

    我正在使用 js 库 qtip 工具提示 当我将鼠标悬停在表格中的悬停行上时 我想让 qtip 工具提示随光标移动 我知道如何让我自己的工具提示随光标移动 但我在使用 qtip 时遇到了困难 请解释您回答的代码 谢谢 My html tab
  • 类型转换为布尔值

    有人可以解释一下为什么会这样吗 var dump bool 1 2 returns bool true but var dump 1 2 returns bool false 当然第二次返回是正确的 但是为什么第一次 php 返回一个意外的
  • 黑客已将内容添加到我的 PHP 文件中 [已关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我的网站已被黑客拿下 浏览该网站会发现每个 PHP 文件的顶部都有大量附加内容 现在每个文件都以以下内容开头 GLOBAL wehaveitagain
  • 在 .js.erb 文件中使用 $(this) - Ruby on Rails AJAX

    我正在使用 Rails3 和 jQuery 并尝试执行简单的 ajax 调用 我有一个显示应用程序当前状态 在线 离线 的链接 单击后 它将更新状态 link to app status controller gt apps action
  • 如何在conda中管理两个pip版本?

    我正在 Windows 中使用 conda 我不小心安装了两个版本的 pip 使用python m pip install upgrade pip 现在当我跑步时conda list来自基础环境 While pip version给出点 1
  • 实体框架 - 使用 order by 和 group by 的 Linq 查询

    I have Measurement具有相关属性的对象CreationTime 日期时间 和Reference 字符串 和一些其他值 我想编写一个高效的 linq 查询DbContext that 分组我的Measurement给定的对象R
  • 在 eclipse 2.0 的 aws 工具包中承担/切换角色

    我正在使用适用于 eclipse 2 0 的 aws 工具包 使用选项 窗口 gt 首选项 gt aws 工具包 我已经配置了 IAM 登录用户 api 访问密钥 id 和秘密访问密钥 根据我们的 aws 配置 此 IAM 用户必须承担角色
  • 如何在 PHP 中查找图像是否存在或渲染正常?

    我遇到这种情况 我有一些图片 http www example com test1 jpg http www example com test2 jpg http www example com test3 jpg 其中一些可能是死链接 图
  • Spark:将 RDD 结果写入文件系统很慢

    我正在使用 Scala 开发 Spark 应用程序 我的应用程序仅包含一项需要改组的操作 即cogroup 它在合理的时间完美运行 我面临的问题是当我想将结果写回文件系统时 由于某种原因 它比运行实际程序花费的时间更长 起初 我尝试在不重新
  • 检查正在运行的程序中是否存在内存泄漏

    出于好奇 我有一个关于检查内存泄漏的问题 作为一个用过的人valgrind在过去的一两年里 我经常检查代码中的内存泄漏 我突然想到它只检测丢失 未释放的内存来世之后的程序 因此 鉴于此 我在想如果你有一个长期运行的程序malloc 是间歇性
  • C 中允许重复的 const 限定符,但 C++ 中不允许?

    示例代码片段 const const const int x 10 int main 在 C 中编译 但在 C 中不编译 为什么用C编译 我认为这在 C 中也会失败 没关系 C 标准的哪一部分禁止使用重复项constC 标准的哪一部分允许这
  • 如何对 fgets 使用 feof 和ferror(C 中的 minishell)[重复]

    这个问题在这里已经有答案了 我已经编写了这个 minishell 但我不确定我是否对错误进行了正确的控制 我知道 fgets 可以返回 feof 和ferror http www manpagez com man 3 fgets http
  • spring事务超时可配置

    我有一个具有固定超时的事务方法 有没有一种方法可以通过即配置来配置事务超时application yml Transactional propagation Propagation REQUIRED timeout TIMEOUT publ
  • 如何使用 Snowflake SQL 解析 ISO 8601 时间戳?

    我正在寻找一个允许我解析 ISO8601 时间戳的通用函数 我知道关于to timestamp tz https docs snowflake net manuals sql reference functions to timestamp
  • 将两个整数合并为一个并稍后解码

    使用 C 我需要将两个不同的 ID 组合成一个 16 位整数 然后我需要将这个 16 位整数解码为两个原始 ID 值 Example Store two integers into one unsigned short Identifier
  • 测试:如何测试视图包含所需的数据

    假设厨师可以制作食谱 副厨师可以创建必须经过主厨批准的食谱 您想要测试一下 当主厨查看她的主页时 她会看到她自己创建的食谱 您还想测试她是否看到有食谱等待她的批准 我可以想到两种方法来做到这一点 测试视图是否包含某些单词 例如 您的食谱 和