JavaScript 简易 Mock 类实现与单元测试示例

作者:知秋

时间:2026-10-26

浏览:664

本文介绍了一个轻量级的 JavaScript Mock 类实现,用于模拟函数行为并统计调用次数。通过 setup、returnAs 等方法构建模拟对象,并结合 QUnit 框架进行单元测试,验证特定函数在特定场景下的执行次数与状态变化,适用于前端开发中的依赖模拟与逻辑验证。

文章目录

JavaScript Mock 类核心实现

代码示例如下:

(function () {
var KMock = window.KMock = function () {
} 
KMock.prototype.setup = function (methodName) {
var instance = this;
instance[methodName] = {
returnAs: function (fn) {
instance["_" + methodName] = function () {
instance[methodName].invokeNum++;
fn.call();
} 
}, 
isVerify: function (exceptNum) {
if (exceptNum != null) {
return exceptNum == instance[methodName].invokeNum;
} 
else {
return instance[methodName].invokeNum > 0;
} 
}, 
invoke: function () {
instance["_" + methodName].call();
}, 
invokeNum: 0
}; 
return instance[methodName];
} 
})(); 
基于 QUnit 的单元测试应用示例// 自定义Mock类,用于模拟函数并验证调用次数,具体用法如下
<BR><DIV class=cnblogs_Highlighter><PRE class=brush:javascript>/// <reference path="Flight.js" />
/// <reference path="http://demo.jb51.net/jslib/qunit/qunit.js" />
/// <reference path="KMock.js" />
module("enter coin");
test("enter coin while game has not yet start", function () {
var flight = new KFlight();
var mock = new KMock();
mock.setup("draw").returnAs(function () {
}); 
flight.draw = mock.draw.invoke;
equal(flight.coinNum, 0);
equal(flight.gameState, 0);
flight.coinEnter();
equal(flight.coinNum, 0);
equal(flight.gameState, 1);
equal(mock.draw.isVerify(1), true);
});

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章