мой блог:Фреймворк модульного тестирования JavaScript
Введение
Тестирование является важной частью обеспечения качества кода.Хотя модульное тестирование веб-проектов не может полностью завершить функциональное тестирование, оно может обеспечить качество работы базового отдельного модуля и гарантировать, что внешний интерфейс не изменится во время рефакторинга кода.
тестовая среда
- Mocha
- Jasmine
- Jest
- Tape
- Karma
Mocha
Mocha — это гибкая среда тестирования, но это всего лишь структура, вам нужно ввести другие плагины для реализации некоторых функций тестирования, таких как библиотека утверждений, статистика покрытия и т. д.
Инсталляция мокко
установка нпм:npm install mocha --save-dev
Синтаксис сценария
Краткий пример:
// 引入需测试的模块或类
const add = require("./add");
const assert = require("assert");
// describe:定义一组测试
describe("加法函数测试", function() {
before(function() {
// runs before all tests in this block
});
// it: 定义一个测试用例
it("1 加 1 应该等于 2", function() {
// assert: nodejs内置断言模块
assert.equal(add(1, 1), 2);
});
after(function() {
// runs after all test in this block
});
});
инструкции
Создайте каталог для тестовых скриптовtest-mocha, имя тестового сценария должно следовать[模块名].test.jsстиле, то вpackage.jsonНастройте тестовую команду в:
"scripts": {
"test-mocha": "mocha test-mocha/"
}
воплощать в жизньnpm run test-mochaЗатем результаты выходного теста выглядят следующим образом:
Библиотека утверждений
Поддержка моккоshould.js, chai, expect.js, better-assert, unexpectedи т. д. Библиотека утверждений. В приведенном выше примере вы можете сравнить различия между различными библиотеками утверждений:
- assert
assert.ok(add(1, 1));
assert.equal(add(1, 1), 2);
- should.js
(add(1, 1)).should.be.a.Number();
(add(1, 1)).should.equal(2);
- expect.js
expect(add(1, 1)).to.be.a("number");
expect(add(1, 1)).to.equal(2);
- chai: поддержка должна, ожидать, утверждать три синтаксиса
Подводить итоги,should.jsа такжеexpect.jsВ сравнении сassertЭто более семантично и поддерживает определение типа, в то время какshould.jsСинтаксически более краткий, поддерживая синтаксис цепочки.and.
hooks
Mocha поддерживает 4 вида хуков, в том числеbefore / after / beforeEach / afterEach.
Асинхронное тестирование
Значение по умолчанию Mocha для каждого выполнения тестового случая 2000ms превышает заданную длину, поэтому, если тестовый код в асинхронной работе, то необходимостьdoneфункция, чтобы очистить конец тестового примера.doneприниматьErrorпараметр.
BOM/DOM
Когда Mocha работает в среде узла, он не поддерживает интерфейсы BOM и DOM и должен быть импортирован.jsdomа такжеjsdom-globalбиблиотека.
Jasmine
Jasmine — полнофункциональная среда тестирования со встроенными утверждениями.expect; Однако существуют глобальные объявления и требуется конфигурация, которая является относительно более сложной и негибкой в использовании.
Жасминовая инсталляция
установка нпм:npm install jasmine --save-dev
синтаксис скрипта
const add = require("../src/add");
describe("加法函数测试", function () {
it("1加1等于2", function() {
expect(add(1, 1)).toEqual(2);
});
it("输出数字", function() {
expect(add(1, 1)).toEqual(jasmine.any(Number));
});
});
Синтаксис Jasmine очень похож на Mocha, но утверждения используют встроенныеexpect().
инструкции
Новый файл конфигурацииjasmine.json:
{
// 测试脚本相对路径
"spec_dir": "test-jasmine",
// 测试脚本
"spec_files": [
"*.test.js"
"!*.notest.js"
],
// 测试前需要引入的脚本
"helpers": [],
// 是否在遇到第一个报错后停止测试
"stopSpecOnExpectationFailure": false,
// 是否以半随机顺序执行测试
"random": false
}
Создать каталог тестовых скриптовtest-jasmine, файл скрипта называется[模块名].test.js,существуетpackage.jsonНастройте тестовую команду в:
"scripts": {
"test-jasmine": "jasmine --config=jasmine.json"
}
затем выполнитьnpm run test-jasmineЗатем результаты выходного теста выглядят следующим образом:
хуки и асинхронность
Похож на Мокко.
Jest
Jest — это полнофункциональная среда тестирования с нулевой конфигурацией, которая объединяет различные инструменты и может использоваться без настройки.
Шуточная инсталляция
установка нпм:npm install --save-dev jest
синтаксис скрипта
Синтаксис Jest отличается от двух вышеупомянутых фреймворков:
const add = require("../src/add");
describe("加法函数测试", () => {
test("1加1等于2", () => {
expect(add(1, 1)).toBe(2);
});
});
шутитьtestОпределите тестовый пример с его собственными утверждениямиexpect, библиотека утверждений мощная, но синтаксисshould.jsсложнее.
Синтаксис утверждения:
- Нормальное совпадение:
toBe,not.toBe - Пустое совпадение:
toBeNull,toBeUndefined,toBeDefine,toBeTruthy,toBeFalsy - Размер номера:
toBeGreaterThan,toBeGreaterThanOrEqual,toBeLessThan,toEqual,toBeCloseTo(для чисел с плавающей запятой) - Регулярный матч:
toMatch - Запрос массива:
toContain - Конструктивное совпадение:
toEqual(expect.any(constructor))
инструкции
Создать каталог тестовых скриптовtest-jest, файл скрипта называется[模块名].test.js,существуетpackage.jsonНастройте тестовую команду в:
"scripts": {
"test-jest": "jest test-jest/"
}
затем выполнитьnpm run test-jestЗатем результаты выходного теста выглядят следующим образом:
hook
У шутки тоже четыре крючка,beforeAll/beforeEach/afterAll/afterEach.
BOM/DOM
Jest имеет встроенную поддержку интерфейсов DOM и BOM.
Статистика покрытия
Jest имеет встроенную статистику покрытия, для более удобной настройки мы можем создать конфигурационный файлjest.config.js:
module.exports = {
// 开启覆盖统计功能
collectCoverage: true,
// 指定需要覆盖的文件
collectCoverageFrom: [
"src/*.js"
],
// 指定输出覆盖统计结果的目录
coverageDirectory: "test-jest/coverage/",
// 指定测试脚本
testMatch: [
"**/test-jest/*.test.js"
]
};
потомpackage.jsonИзмените наименование в:"test-jest": "jest", и после повторного запуска можно получить следующие результаты: