gpt4 book ai didi

javascript - 包括用于单元测试的外部 .js 文件

转载 作者:行者123 更新时间:2023-12-03 04:19:47 26 4
gpt4 key购买 nike

我正在尝试为我的 JavaScript 单元测试(用 QUnit 编写[不是我的想法,遗留项目])运行覆盖率测试,并通过命令行运行它们。我面临的问题是对外部代码位的引用。看下面的例子:

代码:

var DateHelper = function() {
return {
GetUtcDate: function (date) {
if (DateTypeChecker.Data["date"]) {
return new Date();
}
return date;
}
}

测试:

QUnit.test('GetUtcNow - compare UTC date', function(assert) {
var currentUtcDate = DateHelper.GetUtcNow();
var nowDate = new Date();

assert.equal(nowDate.getUTCFullYear() == currentUtcDate.getFullYear(), 'dates are the same');
});

这是一个检查两个日期的非常简单的测试,在浏览器中运行时效果很好,因为包含 DateTypeChecker 的外部 javascript 文件已加载到 HEAD 中。但此测试在命令行中失败,因为 node(或正在执行测试的 Node )没有对 DateTypeChecker 对象的引用。

我的问题是,如何解决此问题,以便加载/需要 DateTypeChecker 文件? (我知道我可以使用 RequireJS 做到这一点,但我不想添加更多依赖项和框架)

我认为这是 js 单元测试(不仅仅是 QUnit)的普遍问题。

最佳答案

两个选项:(a) 模拟外部依赖项或 (b) 实际包含外部依赖项 JS 文件。对于第二个选项 (b),我将使用像 Karma 和 hook up QUnit 这样的测试运行程序到它。该链接站点上的配置非常简单。

不过,我推荐第一个选项 (a)。它使您的测试更加幂等,从而松散耦合。在 QUnit 中,您可以非常简单地设置模拟,我们只需使用一个简单的 beforeEach 函数:

QUnit.module( "testing DateHelper", {
beforeEach: function() {
// before each test runs, we can create a "fake" DateTypeChecker
// Note that it doesn't matter what this thing does, so long as it
// satisfies your dependency in the DateHelper
window.DateTypeCheker = {
Data: { date: true }
};
}
});

QUnit.test( ... ); // your normal stuff

关于javascript - 包括用于单元测试的外部 .js 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44000165/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com