什么是 AVA (类似于 unittest)

AVA 是一种 JavaScript 单元测试框架,是一个简约的测试库。AVA 它的优势是 JavaScript 的异步特性和并发运行测试, 这反过来提高了性能。

什么是 Spectron

Spectron 是一个 node.js 框架,用于自动化应用程序 Electron。

AVA + Spectron + JavaScript

AVA + Spectron + JavaScript 对 JavaScript 的客户端进行自动化集成测试。

AVA 常用的 api

  • test([title], implementation) 基本测试
  • test.serial([title], implementation) 串行运行测试
  • test.cb([title], implementation) 回调函数形式
  • test.only([title], implementation) 运行指定的测试
  • test.skip([title], implementation) 跳过测试
  • test.todo(title) 备忘测试
  • test.failing([title], implementation) 失败的测试
  • test.before([title], implementation) 钩子函数,这个会在所有测试前运行
  • test.after([title], implementation) 钩子函数,这个会在所有测试之后运行
  • test.beforeEach([title], implementation) 钩子函数,这个会在每个测试之前运行
  • test.afterEach([title], implementation) 钩子函数,这个会在每个测试之后运行
  • test.after.always([title], implementation) 钩子函数,这个会在所有测试之后运行,不管之前的测试是否失败
  • test.afterEach.always([title], implementation) 钩子函数,这个会在每个测试之后运行,不管之前的测试是否失败

AVA 内置断言

  • .pass([message]) 测试通过
  • .fail([message]) 断言失败
  • .truthy(value, [message]) 断言 value 是否是真值
  • .falsy(value, [message]) 断言 value 是否是假值
  • .true(value, [message]) 断言 value 是否是 true
  • .false(value, [message]) 断言 value 是否是 false
  • .is(value, expected, [message]) 断言 value 是否和 expected 相等
  • .not(value, expected, [message]) 断言 value 是否和 expected 不等
  • .deepEqual(value, expected, [message]) 断言 value 是否和 expected 深度相等
  • .notDeepEqual(value, expected, [message]) 断言 value 是否和 expected 深度不等
  • .throws(function|promise, [error, [message]]) 断言 function 抛出一个异常,或者 promise reject 一个错误
  • .notThrows(function|promise, [message]) 断言 function 没有抛出一个异常,或者 promise resolve
  • .regex(contents, regex, [message]) 断言 contents 匹配 regex
  • .notRegex(contents, regex, [message]) 断言 contents 不匹配 regex
  • .ifError(error, [message]) 断言 error 是假值
  • .snapshot(expected, [message]) 将预期值与先前记录的快照进行比较
  • .snapshot(expected, [options], [message]) 将预期值与先前记录的快照进行比较

如下是 creat_furure.ts 测试脚本。

  1. import test from 'ava';
  2. import { cycle, config, util, RQPro } from '../../helpers';
  3. test.beforeEach(async t => {
  4. t.context.account = config.loadAccount();
  5. t.context.selector = config.loadSelector();
  6. t.context.app = await cycle.start();
  7. t.context.client = t.context.app.client;
  8. await cycle.login(t.context.client, t.context.account.auto);
  9. t.context.rqpro = new RQPro(t.context.app);
  10. });
  11. test.afterEach(async t => {
  12. await util.wait(500);
  13. await cycle.stop(t.context.app);
  14. });
  15. test('should support create future algorithm and build , async t => {
  16. const { client, selector } = t.context;
  17. await client.waitForExist(selector.olAlgorithms.container);
  18. await client.click(selector.olAlgorithms.createBtn);
  19. await client.waitForExist(selector.olAlgorithms.createDialog);
  20. await util.wait(500);
  21. await client.setValue(selector.olAlgorithms.createFormTitleInput, `guard-${Date.now()}`);
  22. await client.click(selector.olAlgorithms.createsFormStockCheckbox);
  23. const title = await client.getTitle();
  24. if (title.indexOf('模拟') !== -1) {
  25. t.pass();
  26. }
  27. });

脚本中的 waitForExist 、 click 、setValue 等对元素的操作的方法来自于 WebdriverIo, 元素定位方法为 css selecotor,元素定位存放在配置文件 selector.yml 里。

实际项目结构如下:

参考资料:

  1. https://github.com/avajs/ava#faq
  2. https://juejin.im/entry/597e88035188257f833d3bb8
  3. http://webdriver.io/api.html

AVA + Spectron + JavaScript 对 JS 编写的客户端进行自动化测试的更多相关文章

  1. 前端之JavaScript:JS简单介绍

    JavaScript(JS)之简单介绍 一.JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名Scr ...

  2. 为Node.js编写组件的几种方式

    本文主要备忘为Node.js编写组件的三种实现:纯js实现.v8 API实现(同步&异步).借助swig框架实现. 关键字:Node.js.C++.v8.swig.异步.回调. 简介 首先介绍 ...

  3. Breach - HTML5 时代,基于 JS 编写的浏览器

    Breach 是一款属于 HTML5 时代的开源浏览器项目,,完全用 Javascript 编写的.免费.模块化.易于扩展.这个浏览器中的一切都是模块,Web 应用程序在其自己的进程运行.通过选择合适 ...

  4. js编写验证码

    这是一个简单的js编写的验证码,自己已经亲自验证,没有问题了 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN ...

  5. Node.js编写CLI的实践

    导语:通常而言,Node.js的应用场景有前后端分离.海量web页面渲染服务.命令行工具和桌面端应用等等.本篇文章选取CLI(Command Line Tools)这子领域,来谈谈Node.js编写C ...

  6. 怎么用js编写1——100的质数?

    这里来自csdn问答的一个问题,怎么用js编写1——100的质数? http://ask.csdn.net/questions/214429 质数也就是素数,即只能被1和自身整除的数,因此可以构造循环 ...

  7. JavaScript中利用Ajax 实现客户端与服务器端通信(九)

    一:Ajax (Asynchronous JavaScript and XML)不是一个新的技术,事实上,它是一些旧有的成熟的技术以一种全新的更加强大的方式整合在一起 Ajax的关键技术: 1.使用X ...

  8. js编写轮播图,广告弹框

    1.轮播图 js编写轮播图,需要用到setInterval(计时器):先给一个div,里面放轮播图的图片,将轮播图的图片明明为相同样式的:如:banner1.jpg,banner2.jpg,banne ...

  9. Node.js 使用http客户端向网站请求数据并保存

    app.js代码: // 内置http模块,提供了http服务器和客户端功能 var http=require("http"); // 内置文件处理模块 var fs=requir ...

随机推荐

  1. 12 MySQL--内置功能介绍

    mysql内置功能: 1.视图 2.触发器 3.存储过程 4.事务 5.函数 6.函数流程控制 一.视图 介绍: 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名] ...

  2. AOP术语

    1.连接点(Joinpoint) 程序执行的某个特定位置:如类开始初始化前,类初始化后,类某个方法调用前,调用后,方法跑出异常后.一个类或一段程序代码拥有一些具有边界性质的特定点.这些代码中的特定点就 ...

  3. MyBatis ehcache二级缓存

    ehcache二级缓存的开启步骤: 1.导入jar 2.在映射文件中指定用的哪个缓存 3.加一个配置文件,这个配置文件在ehcache jar包中就有 使增删改对二级缓存不刷新: 对一级缓存没有用的, ...

  4. tar、tgz、gz文件批量解压方法

    我是用for i in $(ls *.tgz);do tar xvf $i;done 批量解压的tgz文件的我是用for i in $(ls *.gz);do gzip -d $i;done批量解压的 ...

  5. Golang基本结构之练习(day2)

    笔记: . 任何一个代码文件隶属于一个包 . import 关键字,引用其他包: import(“fmt”) import(“os”) 通常习惯写成: import ( “fmt” “os” ) . ...

  6. Linux System V Semaphore semget多进程同时创建缺陷解决方法

    System V Semaphore的创建过程缺陷是创建与赋初值由两个函数完成,这会导致两个进程同时创建的话会出现竞争和不一致状态,即使是使用了IPC-EXCL标记. 示例: oflag = IPC- ...

  7. IRC聊天指南

    参考https://www.cnblogs.com/fzzl/archive/2011/12/26/2302637.html

  8. OpenCV的配置

    系统配置:win7 64位系统,编译器 vs2013 一.下载OpenCV安装包(版本2.4.13) https://excellmedia.dl.sourceforge.net/project/op ...

  9. canvas里调用getImageData的报security的问题

    canvas元素支持绘制任意图片元素: var ctx = document.getElementById("canvas").getContext("2d") ...

  10. php autoload 笔记

    php auotload 实现了类的延迟加载机制,需要的时候在include,平时很少用到.它的实现原理搜了一下如下(不是本人研究的结果): 检查执行器全局变量函数指针autoload_func是否为 ...