- Objective:
- Breadcrumb:
# 概念阐释
# 实例
# 相关内容
# 问题
1. 导入导出模块的CJS写法?
2. 每种验证是如何完成的?
3. assert.throw()的语法怎么写?
# 问题答案
```js
const assert = require('assert');
//导入和到处模块的另一种写法
const Rooster = require('../index.js');
describe('Rooster', ()=>{
describe('.announceDawn', () => {
it('returns a rooster call', () => {
//setup
const expected = 'moo!';
//exercise
let announceDawn = Rooster.announceDawn();
//verify
assert.ok(expected === announceDawn);
});
});
describe('.timeAtDawn', ()=> {
it('returns its argument as a string', () =>{
//setup
const expected = '10';
//exercise
const timeAtDown = Rooster.timeAtDawn(10);
//verfity
assert.strictEqual(expected,timeAtDown);
});
//实现代码
/*Rooster.timeAtDawn = (hour) => {
if (hour < 0 || hour > 23) {
throw new RangeError;
} else {
return hour.toString();
};
}*/
it('throws an error if passed a number less than 0', () => {
assert.throws(
()=>{
Rooster.timeAtDawn(-1);
},
RangeError
);
});
it('throws an error if passed a number greater than 23',()=> {
assert.throws(
() => {
Rooster.timeAtDawn(24);
},
RangeError
);
});
});
});
/*10-12 您将下一个测试是,如果传递的参数不是有效的小时数(小于0或大于23),则 .timeAtDawn 抛出错误。
测试两个边界,使您的测试套件完整。在分开的 it 块中测试每个边界,以便可维护。
测试 .timeAtDawn 如果传递的数字小于0,则“抛出错误”。确保使用 it() 和一个检查抛出的错误的 assert 方法。*/
```
# 参考资料
[Rooster Regulation](https://www.codecademy.com/journeys/full-stack-engineer/paths/fscj-22-front-end-development/tracks/fscj-22-javascript-testing/modules/wdcp-22-write-good-tests-with-mocha-764e85ca-0abf-4da9-91a2-43f8d593eab8/projects/rooster-regulation)