第一行执行test1.js test2.js test3.js三个脚本
第二行执行test底下test1,test2 两个脚本
mocha test1.js test2.js test3.js
mocha test/{test1,test2}.js
默认mocha测试test下面第一层文件,加上recursive,test底下所有都会被测到
mocha --recursive
mocha test/demo3/*.js
mocha --grep "a"
describe('test', function(){
describe.only('a', function(){
})
it.only('a', function() {
expect(result).to.be.equal(2);
});
})
mocha --grep "a" --invert
describe('test', function(){
describe.skip('a', function(){
})
it.skip('a', function() {
expect(result).to.be.equal(1);
});
})
创建test 目录下 创建 mocha.opts 脚本
mocha.opts
--reporter //默认spec
testapp //指定目录testapp,如果默认test,这一行不用写
--recursive
--watch
第一行指定测试报告的格式,默认spec格式,可以改写为 --reporter spec
或者–reporter mochawesome
第二行+第三行,执行某个目录底下所有文件
第四行mocha --watch,只要测试脚本发生变化,就会自动触发执行测试
执行mocha 即可
官网的例子
before()钩子只运行(一次),然后beforeEach()钩子,afterEach()钩子,每次it前后都会运行一次,最后after()钩子只运行(一次)
describe("mocha钩子函数",function(){
before(function(){
//本块代码会在所有测试用例执行之前执行
});
after(function(){
//本块代码会在所有测试用例执行之后执行
});
beforeEach(function(){
//本块代码会在每个测试用例执行之前执行
});
afterEach(function(){
//本块代码会在每个测试用例执行之后执行
});
})
查看2.test.js
setTimeout函数接受两个参数,第一个参数func|code是将要推迟执行的函数名或者一段代码,第二个参数delay是推迟执行的毫秒数。
describe("ascy failed", function () {
var a= false;
beforeEach(function () {
setTimeout(function () {
a= true;
}, 50);
});
it("should pass", function () {
expect(a).to.be.equal(true);
});
});
在setTimeout里面回调被调用之前,expect运行了,所以fail掉了。现在加上done().
describe("ascy ok", function () {
var a= false;
beforeEach(function (done) {
setTimeout(function () {
a= true;
done();
}, 50);
});
it("should pass", function () {
expect(a).to.be.equal(true);
});
});
done告诉了mocha,你在编写异步测试,mocha进入一个计时器,等待异步函数来完成
当测试内容需要长时间加载时,很容易timeout,用-t或–timeout参数,改变默认的超时设置
mocha -t 5000 1.test.js
查看3.test.js
使用API: https://randomuser.me/api/?results=10
创建测试3.test.js文件,执行需要加时间mocha 3.test.js -t 30000
Mocha内置对Promise的支持,允许直接返回Promise,等到它的状态改变,再执行断言
var expect = require('chai').expect;
const fetch = require("node-fetch");
describe("HTTP ok", function () {
it('HTTP', function () {
return fetch('https://randomuser.me/api/?results=10/3')
.then(function (res) {
return res.json();
}).then(function (json) {
expect(json).to.be.an('object');
});
});
});
这部分功能没用过,想学习的点这
实战:Puppeteer+Mocha+Chai实现端到端测试
https://harttle.land/2016/07/12/async-test-with-chai-as-promised.html
http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html
https://www.jianshu.com/p/c95d48a00f97