原文: http://exploringjs.com/impatient-js/ch_quizzes-exercises.html
在大多数章节中,都有测验和练习。这些是付费功能,但可以进行全面预览。本章介绍如何开始使用它们。
安装:
impatient-js-quiz.zip
运行测验应用程序:
impatient-js-quiz/index.html
安装练习:
impatient-js-code.zip
README.txt
中的说明进行操作exercises/syntax/first_module_test.js
本书中的所有练习都是通过测试框架 Mocha 运行的测试。本节简要介绍。
典型的测试代码分为两部分:
举例来说,以下两个文件:
id.js
(待测代码)id_test.js
(测试)代码本身驻留在id.js
中:
export function id(x) {
return x;
}
这里的关键是:必须导出要测试的所有内容。否则,测试代码无法访问它。
您无需担心测试的确切细节:它们始终为您实施。因此,您只需要阅读它们,但不要写它们。
代码测试位于id_test.js
:
import {strict as assert} from 'assert'; // (A)
import {id} from './id.js'; // (B)
test('My test', () => { // (C)
assert.equal(id('abc'), 'abc'); // (D)
});
该测试文件的核心是 D 行 - 断言:assert.equal()
指定id('abc')
的预期结果是'abc'
。
至于其他线路:
test()
来完成的:
要运行测试,我们在命令行中执行以下命令:
npm t demos/syntax/id_test.js
t
是test
的缩写。也就是说,这个命令的长版本是:
npm test demos/syntax/id_test.js
以下练习让您初步了解练习的内容:exercises/syntax/first_module_test.js
您可以推迟阅读本节,直到您进入异步编程的章节。
为异步代码编写测试需要额外的工作:测试稍后会收到它的结果,并且必须向 mocha 发出信号,表示它还没有完成,但是当它返回时。以下小节将分析三种方法。
done()
如果测试至少有一个参数,则测试变为异步。该参数通常称为done
并接收一个代码完成后调用的函数:
test('divideCallback', (done) => {
divideCallback(8, 4, (error, result) => {
if (error) {
done(error);
} else {
assert.strictEqual(result, 2);
done();
}
});
});
如果返回 Promise,测试也会变为异步。一旦 Promise 完成或被拒绝,Mocha 就会认为测试结束。如果 Promise 得到满足则认为测试成功,如果 Promise 被拒绝则认为测试失败。
test('dividePromise', () => {
return dividePromise(8, 4)
.then(result => {
assert.strictEqual(result, 2);
});
});
异步函数总是返回 Promises。因此,异步函数是实现异步测试的便捷方式。以下代码与前面的示例等效。
test('dividePromise', async () => {
const result = await dividePromise(8, 4);
assert.strictEqual(result, 2);
// No explicit return necessary!
});
您不需要显式返回任何内容:隐式返回的undefined
用于实现此异步函数返回的 Promise。如果测试代码抛出异常,则异步函数负责拒绝返回的 Promise。