- 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)