【问题标题】:Test immediately invoke function测试立即调用函数
【发布时间】:2018-09-17 00:32:17
【问题描述】:

我希望为包含立即调用函数的 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 文件不能是 required 两次。

编辑:是的context是一个全局变量,当脚本为required时会被操作。我知道这是一个丑陋的解决方案,但我无法更改原始文件。

感谢任何建议。

【问题讨论】:

  • so .. context 是全局变量吗?你的笑话代码中的哪一部分是在处理 IIFE?不清楚
  • 你可以使用require两次,但是它被缓存了。从你的问题中不清楚这是否是一个问题。您应该发布足够多的代码,以便有人可以重现该问题。
  • 为什么不让test2依赖test1的成功完成?
  • 我已经更新了帖子。缓存是问题(我假设),因为“全局”context 变量在第二次测试中没有被操作(随后失败)

标签: javascript unit-testing


【解决方案1】:

jest 具有额外级别的缓存模块,可防止require 多次运行。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 2010-10-30
    • 2020-04-20
    • 1970-01-01
    • 2012-06-14
    • 2016-04-07
    相关资源
    最近更新 更多