首页
学习
活动
专区
圈层
工具
发布

带你入门前端工程(四):测试

从前端角度来看,单元测试就是对一个函数、一个组件、一个类做的测试,它针对的粒度比较小。 单元测试应该怎么写呢? 根据正确性写测试,即正确的输入应该有正常的结果。...根据错误性写测试,即错误的输入应该是错误的结果。 对一个函数做测试 例如一个取绝对值的函数 abs(),输入 1,2,结果应该与输入相同;输入 -1,-2,结果应该与输入相反。...因为 abs() 函数中判断类型错误的那个分支的代码没有执行。 // 就是这一个分支语句 if (typeof a !...Funcs:函数覆盖率,是否执行了每个函数。 Lines:行覆盖率,是否执行了每一行代码。 可能有人会有疑问,1 和 4 不是一样吗?其实不一样,因为一行代码可以包含好几个语句。...TDD 的初衷是好的,但如果你的需求经常变(你懂的),那就不是一件好事了。很有可能你天天都在改测试代码,业务代码反而没怎么动。

1.8K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    框架设计续集(六)

    --那么以前的getElem方法就不能实现,所以在下面对次进行实现--> 2.思路分析及实现 /*基本选择器的实现 E */ /*组合选择器的实现 B */ /*怎么实现组合选择器eg:(".con...",".box") 为了实现代码的服用,重新定义一个函数*/ /*对于后代选择器的实现*/ /*eg:select(".c .c1 .c2",context,results) * 实现的思路就是将选择器字符串分割...*/ function select (selector,context,results){ results = results || []; var newselector = selector.split...list,function(m,n){ if(n){//防止字符串截取后,数组里有空字符串eg:".con .box" /*遍历调用getElem函数...,只是每次的上下文不一样,最后返回的结果就是我们需要的*/ c = getElem(n,c) } }); results.push.apply

    60540

    你不知道的Cypress系列(10) -- CypressHelper

    这是IDE VS Code的Cypress插件,可以用来帮助我们更好的使用Cypress进行编码,不是我主动发现的,是Cypress中国(3)群的一位同学主动分享的,为他点赞。...”Cypress编写代码“的痛点 当前在使用Cypress进行UI自动化测试中,存在如下痛点: 1. 无法直接通过点击的方式直达自定义的函数。 2....无法查找一个函数有几处定义,有多少引用。 4. 不知道有哪些别名可以用 。 这些问题的存在影响了测试效率,现发现CypressHelper插件可有效解决这个问题,分享如下。...例如你想一键直达Custom Commands函数的定义位置, 使用方式如下: 找到你定义的Custom Commands,然后右键选择”Cypress: Go to Custom Command Definition...这篇文章没有一点技术含量,但是却实际解决了很多问题,提高了测试生产率,其实有时候想想,日常测试工作也是如此,并不是每天都要高大上,框架,k8s, 云原生,乱七八糟整,不见得能提高多少测试效率。

    1.2K20

    你不知道的Cypress系列(15) -- 支持跨域访问了!

    转眼之间,你不知道的Cypress系列已经到第15篇了。在Cypress中国群内、在公众号iTesting里,我每天都能看到大量关于Cypress的使用讨论和私下问询。这让我感到无比荣幸。...但是Cypress并不是完美无瑕,我们在使用Cypress做自动化测试时,经常会提的一个问题就是,Cypress不支持跨域访问,而我的测试需要跨域怎么办?...options: 这个参数是一个普通的 JavaScript 对象,它将被序列化并从主要来源发送到次要来源。从那里它将被反序列化并作为第一个也是唯一的参数传递给回调函数。...该参数的args对象(注意这个对象,看后续的代码)是唯一可以将数据注入回调的机制,因为回调不是闭包,并且不保留对声明它的 JavaScript 上下文的访问。...callbackFn: 此参数包含要在次要来源中执行的Cypress命令的函数。Cypress将触发此函数并从当前Cypress实例传递到次要源并进行评估。

    2.8K52

    Cypress系列(4)- 解析 Cypress 的默认文件结构

    命令首次打开 Cypress,Cypress 会自动进行初始化配置并生成一个默认的文件夹结构,如下图 ?...,包括HTTP状态码和返回值,一般是复制过来更改而不是自己手工填写 fixtures 的实际应用场景 如果你的测试需要对某些外部接口进行访问并依赖它的返回值,则可以使用测试夹具而无须真正访问这个接口(有点类似...痛点:和外部通信困难】 插件文件的诞生 Cypress 为了解决上述痛点提供了一些现成的插件,使你可以修改或扩展 Cypress 的内部行为(如:动态修改配置信息和环境变量等),也可以自定义自己的插件...后面再详解插件在项目中的实际运用 support file 支持文件 简介 支持文件目录是放置可重用配置项,如底层通用函数或全局默认配置 支持文件默认位于 中,但可以配置到另一个目录 cypress.../support/index.js 文件里添加 beforeEach() 函数即可,如下面例子 ?

    2.8K20

    Cypress与TestCafe WebUI端到端测试框架Demo

    添加自己的第一个测试用例 1、如果是cmd npm安装的cypress, 用例脚本在 \node_modules\cypress\cypress\integration\examples文件下。...为此,它提供了在客户端上执行代码的特殊类型的函数:Selector 用于直接访问DOM元素,ClientFunction用于从客户端获取任意数据。...你可以将这些函数作为常规的异步函数调用,也就是说,你可以获得它们的结果并使用参数向它们传递数据。 Selector API提供方法和属性来选择页面上的元素并获取它们的状态。...例如,单击示例web页面上的Submit按钮将打开一个“谢谢”页面;要访问打开页面上的DOM元素,就必须使用Selector函数。 下面的示例演示如何访问文章标题元素并获取其实际文本。...10分钟入门完全不是吹的。

    4.5K30

    你不知道的Cypress系列(11) -- 使用cy.session()加速鉴权。

    这让我感到无比荣幸(买了书的同学们,公众号回复你的微信号,拉你到Cypress中国群)。 今天是你不知道的Cypress系列(11) -- 使用cy.session()加速鉴权。...,剩余的cy.login()都是恢复缓存,不是真正的执行登录操作。...account') cy.get('#amount').type('100.00') cy.get('#send-money').click() // 一般情况下,此时应调用cy.logout()函数...// 使用cy.session()后,无需调用cy.logout()函数 // 直接登录下一个账户 cy.login('另外账户', '另外账户密码') cy.visit('/account...你不知道的Cypress系列(5) -- "眼瞎"的TestRunner 你不知道的Cypress系列(6) -- 多Tab的小秘密 你不知道的Cypress系列(7) -- 当iFrame遇见弹出框

    3.4K30

    你不知道的Cypress系列(2) -- ”该死的PO模型​!

    今天是的Cypress系列>的第二篇 -- 绝知此事要躬行,别被Cypress官方忽悠瘸了!...如果我对其它组的服务有依赖,这些通常会构建专门的函数并成为Common Page的一部分。 如果有新人进来,他的学习成本只是我们团队负责的页面 + 公用Page,相对来说比较友好。...,这些状态是你(测试脚本创建者)自己定义的,而不是应用程序内部拥有的, 它增加了debug成本。...这样感觉代码量是不是更少,代码更直观了? 03 — 我怎么看PO和Custom Commands 这里我也谈下我对PO和Custom Commands的看法。...,因为没有了Page做参考,时间一长,我很难从函数命名上看出这个方法应该在那个页面下使用, 更别说对框架不熟悉的新人了。

    2.5K20

    ​day021: 函数的arguments为什么不是数组?如何转化成数组?

    day021: 函数的arguments为什么不是数组?如何转化成数组? 因为argument是一个对象,只不过它的属性从0开始排,依次为0,1,2...最后还有callee和length属性。...我们也把这样的对象称为类数组。...常见的类数组还有: 用getElementByTagName/ClassName/Name()获得的HTMLCollection 用querySlector获得的nodeList 那这导致很多数组的方法就不能用了...let args = Array.from(arguments); console.log(args.reduce((sum, cur) => sum + cur));//args可以调用数组原生的方法啦...} sum(1, 2);//3 当然,最原始的方法就是再创建一个数组,用for循环把类数组的每个属性值放在里面,过于简单,就不浪费篇幅了。

    1.9K10

    Cypress测试用例的编写学习笔记

    前言 cypress 底层依赖于很多优秀的开源框架,其中包含Mocha。mocha是一个适用于Node.js和浏览器的测试框架。它使用异步测试变得简单、灵活和有趣。...01', function () { cy.log("hello cypress") }) it('钩子函数测试02', function () { cy.log("hello cypress...) }) it('skip函数测试02', function () { cy.log("hello cypress") }) }) 执行结果可以看出第一个it()被忽略了 .only指定要运行的测试模块...() { it.only('only函数测试01', function () { cy.log("hello cypress") }) it('only函数测试02', function (...以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家的支持。

    1.3K00

    Cypress(四)查询元素

    是不是看起来很像,实际上,Cypress捆绑了JQuery,并提供了很多JQuery的DOM遍历方法,因此可以使用熟悉的API轻松处理复杂的HTML结构。...Cypress 不会同步返回查询到的元素. const $cyElement = cy.get('.element') 当jQuery使用某种选择器找不到任何匹配的DOM元素时会发生什么?...注:在Cypress中,当您想直接与DOM元素交互时,可以使用.then()将元素作为其第一个参数的回调函数进行调用。...如果您不想要重试功能,想要同步立马返回结果,你可以使用Cypress.$ 二.通过文字内容查询 除了通过jquery的选择器来查询元素,我们还可以方便的通过前端控件里的文件内容来查询,比如我们要查询下面的元素...百度首页 我们可以很方便的通过内容来查询获得,代码如下: cy.contains('百度首页') 这是不是很方便,当我们不知道控件的css

    2K20

    Cypress系列(63)- 使用 Custom Commands

    (name, callbackFn) 参数说明 name:要添加或覆盖的命令的名称 callbackFn :自定义命令的回调函数,回调函数里自定义函数所需完成的操作步骤 options:允许自定义命令的隐性行为...执行下面的命令 npm start Custom Commands 的简单栗子 command.js 的代码 在 cypress/support/commands.js 中写如下代码 Cypress.Commands.add...Customn Commands 的好处 定义在 中的命令可以像 Cypress 内置命令那样直接使用,无须 import 对应的 page(实际上 PageObject 模式在 Cypress 看来无非是数据.../操作函数的共享) cypress/support/command.js 自定义命令可以比 PageObject 模式运行更快,Cypress 和应用程序运行在同一个浏览器中,意味着 Cypress 可以直接发送请求到应用程序并设置运行测试所需要的用户状态...实际情况 可能需要屏蔽传递给 命令的某些值,以便敏感数据不会显示在测试运行的屏幕截图或视频中 .type() 下面的示例将覆盖 命令,以允许屏蔽测试运行程序的命令日志中的敏感数据 .type() Cypress.Command.overwrite

    2.2K72

    cypress搭建自动化框架

    下面就讲讲如何使用cypress搭建一个自动化框架。当然我还是初学者,市面上也没有太多的资料,都是入门级的,官方文档也只给你渔,不会提供鱼,自己折腾出来的,感觉像那么回事。...还有各个环境,文件的数量倍数上升了。 于是乎,将函数参数化,将公共部分抽取出来,难记的参数写成JS对象,这样看起来就舒服多了。...开始从一个简单的样例跑起功能来,然后抽离函数,接着抽离组织文件,一个简单的框架就有了雏形。更复杂的,也可以用这种方式来套用。 2. 集成CI 但是其还是基于GUI的。...junit --reporter-options mochaFile=result.xml,toConsole=true cypress run --spec 运行某个单独的测试文件而不是所有的测试用例...: cypress run --spec "cypress/integration/examples/actions.spec.js" 运行*号匹配到的文件目录(注意:推荐使用双星号**): cypress

    1.5K21

    后selenium时代Web UI自动化测试框cypress

    Javascipt 实现并执行,本质上只是函数的调用,客户端和后端之间的通信仅用于测试结果的收集,不包含具体的指令执行 Chapter2 Inject script方案的代表:Cypress 1 Cypress...简介 先看看cypress是如何做自我介绍的 ?...为了让Cypress与众不同,Cypress使用全新的架构,它运行在与应用程序相同的运行循环中,而selenium则通过网络执行远程命令 特点二、专注于做好端到端测试 Cypress不是一个通用的自动化框架...,也不是一个用于后端服务的单元测试框架。...如果你的团队没有js的学习成本或者,有一定的js基础,又面临selenium自动化性能差,响应时间长,资源加载慢等问题的困扰,不妨尝试下Cypress 最后送上传送门:https://www.cypress.io

    3.6K21

    前端面试 【JavaScript】— 函数的arguments为什么不是数组?如何转化成数组?

    因为arguments本身并不能调用数组方法,它是一个另外一种对象类型,只不过属性从0开始排,依次为0,1,2...最后还有 callee 和length属性,我们也把这样的对象称为类数组。...常见的类数组还有: 1. 用getElementsByTagName/ClassName()获得的HTMLCollection; 2. 用querySelector获得的nodeList。...那这导致很多数组的方法就不能用了,必要时需要我们将它们转换成数组,有哪些方法呢?...ES6展开运算符 function sum(a, b) { // 将类数组转换为数组 let args= [...arguments]; // 对转换为数组的方法调用累加...,用for循环把类数组的每个属性值放在里面,过于简单,就不浪费篇幅了。

    2K40

    9 个超实用的 JavaScript 原生插件工具

    地址:https://github.com/cypress-io/cypress ?...对浏览器中运行的任何内容进行快速可靠的测试。 Cypress允许你创建可以与单击按钮交互的测试,填写表格,这个很好地支持定期更新。...Rollup是一个模块打包器,它使用标准化的 ES 模块格式进行代码,而不是以前的解决方案,例如CommonJS & AMD。...实用的JavaScript函数式 。 Ramda强调更纯粹的函数风格,不变性和无副作用的函数是其设计理念的核心,帮助你用简洁优雅的代码完成工作。...这些函数是自动柯里化的,这使你不提供最终参数即可从旧函数构建新函数。 唯一的缺点是它可能很快变得不可读,因此建议避免链接太多函数。

    1.4K20

    你不知道的Cypress系列(1) --鸡肋的BDD

    ').should('exist') }) 看到这里,你心里是不是跟我一样,就这??...(黑人问号脸), 这难道不是另一种形式的函数吗?或者再高大上一点, 关键字?怎么你就敢这么秀?竟然开宗立派叫自己BDD, 要我说,BDD, 你应该叫“别BB,你就是DD!”...03 — 总结 我一贯是讨厌BDD的,在初次定义Cypress框架规范时,也有同学建议我用BDD,我都是一票否决的。...不会写代码的同学用不好BDD, 不是说自然语言描述吗?为什么我描述的框架都不认 :)。 BDD除了给我们增加点工作量和Debug负担后,没有带来任何测试效率提升。...下次预告: 你不知道的Cypress系列(2) -- 绝知此事要躬行,别被Cypress官方忽悠瘸了!

    1.7K20
    领券