如何使用赛普拉斯端到端快照测试来测试Vue单个文件组件

1192805

我有一个Vue单个文件组件,正在尝试使用赛普拉斯端到端测试和@ cypress / snapshot进行快照测试。

如果组件的html获取动态生成的数据或属性,则可能会出现问题。例如,具有范围CSS样式的单个文件组件会向元素添加'data-v- [some hash]'属性,如果哈希发生更改,测试也将失败。

<label class="label" data-v-0ee42ab8="">

重建后

<label class="label" data-v-ca809ab3="">

是否可以选择安全地忽略快照比较的某些部分,例如“ data-v- *”,因此测试仍然可以通过?快照测试不是到这里去的方法吗,和/或有没有更好的选择?

希拉姆·哈肯贝克

似乎该插件尚处于初期"version": "0.0.0-development"

虽然目前没有似乎是定制的比较函数,看着一个选项是目前仅限于快照-比较

cypress-io /快照/src/index.js

'use strict'

/* global cy, Cypress */
...
const compare = require('snap-shot-compare')
...
function compareValues ({ expected, value }) {
  const noColor = true
  const json = true
  return compare({ expected, value, noColor, json })
}

但是可以在compare函数周围添加包装器。

您将需要制作插件的本地副本,并对其进行修改以引用自定义compare函数。

这意味着您将无法直接升级到该插件的下一个正式版本,但是需要针对每个发行版重复这些步骤。

在我的React应用程序中,我想在比较之前从快照中删除CSS模块哈希。
我采取的步骤如下:

  • npm install --save-dev @ cypress /快照

  • 将安装的文件夹复制node_modules\@cypress\snapshotcypress\support\snapshot

  • compare导入更改cypress\support\snapshot\src\index.js为指向自定义比较器,如下所示:

    // const compare = require('snap-shot-compare')
    const compare = require('./my-compare')
    
  • 使用以下代码my-compare.js将其添加到文件夹cypress\support\snapshot\src\

    const snapshotCompare = require('snap-shot-compare')
    
    function compare(data) {
    
      const filterRegex = /__[^"]+/gm;
    
      filtered = {
        ...data,
        expected: data.expected.replace(filterRegex, ''),
        value: data.value.replace(filterRegex, '')
      }
    
      return snapshotCompare(filtered)
    }
    
    module.exports = compare
    

最棘手的一点是使正则表达式正确。您可能可以使用以下内容,在regex101上进行检查

  const filterRegex = /data-v-[^=]+=""/gm;

您可以通过编辑snapshot.js第二次运行之前保存的第一次来进行粗略的测试-例如,更改data-v-datav-,并观察测试失败,因为正则表达式未拾取mod。

请注意,snapshot.js由于全文不包含过滤后的文本,因此正则表达式仅用于比较目的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用赛普拉斯测试文件输入?

赛普拉斯 Vue 组件测试从挂载发出的事件

赛普拉斯-如何按顺序运行测试文件

如何让赛普拉斯使用位于默认集成文件夹之外的测试文件?

赛普拉斯快照测试中如何处理时区?

赛普拉斯-如何最好地测试多步流程

如何让Teamcity显示赛普拉斯失败的测试列表

赛普拉斯的条件测试

赛普拉斯测试验证

赛普拉斯劈弦测试

赛普拉斯-排除之前的测试

赛普拉斯-使用Google Recaptcha测试联系表

使用赛普拉斯测试重定向到新路由

如何从赛普拉斯的测试文件中提取通用功能

如何在赛普拉斯中测试视频文件上传?

即使使用--spec参数,赛普拉斯也会运行所有测试文件

在赛普拉斯测试规范文件中导出可重复使用的Javascript函数

如何使用jquery在赛普拉斯测试中获取div'text'值

使用赛普拉斯,如何测试不存在的元素?

如何在赛普拉斯中使用不同的夹具运行相同的测试?

如何使用赛普拉斯和Auth0测试单页应用程序

如何保存变量/文本以供以后在赛普拉斯测试中使用?

如何使用赛普拉斯测试第二个表中的值

使用赛普拉斯,我该如何编写一个简单的测试来检查页面上是否存在徽标图像

赛普拉斯重试使测试始终通过

赛普拉斯测试的随机元素选择

赛普拉斯测试伪CSS类:之前

赛普拉斯的ignoreTestFiles不会忽略测试

赛普拉斯测试:未找到<li>元素