Javascript 测试立即调用函数

Javascript 测试立即调用函数,javascript,unit-testing,Javascript,Unit Testing,我希望为包含立即调用函数的javascript文件创建一个测试套件。例如: (function(context) { context.setVariable("a") = context.getVariable("a") + 1 })(context); 我无法更改要测试的文件 我当前的尝试是使用jest和以下内容: context = null test('test1', () => { context = new context_mock(); contex

我希望为包含立即调用函数的javascript文件创建一个测试套件。例如:

(function(context) {
    context.setVariable("a") = context.getVariable("a") + 1
})(context);
我无法更改要测试的文件

我当前的尝试是使用jest和以下内容:

context = null

test('test1', () => {
    context = new context_mock();
    context.setVariable("a", "1");
    require("./My-Javascript");
    // Check result
    helper.check(context.getVariable("a"), 2);
});

test('test2', () => {
    context = new context_mock();
    context.setVariable("a", "2");
    require("./My-Javascript");
    // Check result
    helper.check(context.getVariable("a"), 3);
});
在这种情况下,测试2总是失败。我想这是因为javascript文件不能被要求两次

编辑:是上下文是在需要脚本时操作的全局变量。我知道这是一个丑陋的解决方案,但我无法更改原始文件

如有任何建议,我们将不胜感激

jest有一个额外的模块缓存级别,这可以防止require多次运行

添加以下内容以在调用之前清除模块缓存允许脚本运行多次:

beforeEach(() => {
    jest.resetModules()
});

所以上下文是一个全局变量?你的笑话代码中哪一部分是关于生活的?不清楚您可以使用require两次,但它是缓存的。你的问题不清楚这是否是个问题。您应该发布足够的代码,以便有人能够重现问题。为什么不让test2依赖于test1的成功完成?我已经更新了帖子。我认为缓存是一个问题,因为在第二次测试中没有操作全局上下文变量,而第二次测试随后失败