gpt4 book ai didi

javascript - 单元测试有状态 RequireJS 模块的模式

转载 作者:数据小太阳 更新时间:2023-10-29 05:38:44 24 4
gpt4 key购买 nike

假设我有一个 RequireJS 模块,并且我的应用程序中只有一个实例(假设它执行异步操作并向其传递了回调):

// modules/myModule
define(function(){
var module = function(){
var self = this;
self.runSomething(){
console.log("hello world");
};
};

return new module();
});

我想对这个模块的一个实例进行单元测试,我发现自己是这样构建模块的:

// modules/myModule
define(function(){
return function(){
var self = this;
self.runRouting(){
console.log("hello world");
};
};
});

// modules/myModuleInstance
define(["modules/myModule"], function(myModule){
return new myModule();
});

这为我提供了一些没有附加状态的东西,然后我可以从我的单元测试中获取它,所以在我的单元测试中我从不引用 modules/myModuleInstance,只引用 modules/myModule,我每次都为每个测试构建它。然后应用程序引用 modules/myModuleInstance

这感觉像是一种反模式。我讨厌在那里有额外的“模块实例”部分。我知道单元测试中的设置和拆卸方法,并且可以以这种方式维护实例,但是在尝试对大量单例进行单元测试时见证了 C# 会发生什么,摆弄单元测试之间的状态是一件很重要的事情我真的很想避免,尤其是使用动态语言。

在这种情况下,人们通常会怎么做?

最佳答案

根据 Luke McGregor 的评论,很明显我在第一个代码片段中的内容没有问题。使用testr.js我可以定义一个运行测试的模块,如下所示:

// tests/myModuleTests
define(["modules/myModule"], function(myModule){
var instanceOfModule = testr(myModule);
// run some tests

var anotherInstanceOfModule = testr(myModule);
// run some other tests
});

关于javascript - 单元测试有状态 RequireJS 模块的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18970772/

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