基础使用
使用describe和it测试pow函数
<!DOCTYPE html>
<html>
<head>
<script src="../utils/utils.js"></script>
<!-- 引入moncha样式 -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/mocha/3.2.0/mocha.css">
<!-- 引入moncha的js代码 -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/mocha/3.2.0/mocha.js"></script>
<script>
mocha.setup('bdd'); // 设置bdd模式
</script>
<!-- add chai -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/chai/3.5.0/chai.js"></script>
</head>
<body>
<div id='mocha'></div>
<script>
let assert = chai.assert;
function pow(x, y) {
let res = 1;
for (let i = 0; i < y; i++) {
res *= x;
};
return Math.pow(x, y);
};
describe('my test', () => {
it('input (2,3), output shoule be 8', () => {
assert.equal(pow(2, 2), 4);
});
it('input (2,5), output shoule be 32', () => {
assert.equal(pow(2, 3), 16);
});
});
mocha.run();
</script>
</body>
</html>
运行结果如下:
chai 是一个断言库,提供了很多种断言. 例如equal、notEqual、isNaN、isTrue、isFasle、strictEqual等。详细文档
使用for循环生成it语句
在自动化测试中通常使用for循环进行测试语句的生成,因为这样能覆盖更广的测试范围。
//生成随机数
function generateRandomNumber(percision) {
return (Math.random() * 9 + 1).toFixed(percision);
}
//使用for循环
describe('使用for循环生成it语句', () => {
for (let i = 0; i < 20; i++) {
const randomX = generateRandomNumber(0);
const randomY = generateRandomNumber(0);
it(`input (${randomX},${randomY}), output should be ${Math.pow(randomX, randomY)}`, () => {
assert.equal(pow(randomX, randomY), Math.pow(randomX, randomY));
});
};
});
运行结果:
使用嵌套
//嵌套
describe(`最顶层`, () => {
describe('pow函数测试1', () => {
for (let i = 0; i < 20; i++) {
const randomX = 2;
const randomY = generateRandomNumber(0);
it(`input (${randomX},${randomY}), output should be ${Math.pow(randomX, randomY)}`, () => {
assert.equal(pow(randomX, randomY), Math.pow(randomX, randomY));
});
};
});
describe('pow函数测试2', () => {
for (let i = 0; i < 20; i++) {
const randomX = 3;
const randomY = generateRandomNumber(0);
it(`input (${randomX},${randomY}), output should be ${Math.pow(randomX, randomY)}`, () => {
assert.equal(pow(randomX, randomY), Math.pow(randomX, randomY));
});
};
})
})
运行结果:
moncha的前置和后置函数
-
before/after
-
beforeEach/afterEach
before和after在运行测试前后执行,beforeEach和afterEach在每一个it前后执行
describe('after和before方法测试', () => {
before(() => { console.log('before函数执行') });
after(() => { console.log('after函数执行') });
beforeEach(() => { console.log('beforeeach执行') });
afterEach(() => { console.log('afterEach执行') });
it('input (2,3), output shoule be 8', () => {
assert.equal(pow(2, 3), 8);
});
it('input (2,5), output shoule be 32', () => {
assert.equal(pow(2, 5), 32);
});
});
输出结果: