当前位置: 首页 > 知识库问答 >
问题:

如何对异步模块定义模式中编写的JavaScript进行单元测试?

芮承运
2023-03-14

我试图将单元测试框架(JEST)添加到用AMD编写的遗留JavaScript代码库中。当需要添加模块时,NodeJs会触发一个错误。

以下是JavaScript AMD:

define('LegacyModule',
function () {
    'use strict';        
    var exports = {
        CreateTag: function (name) {
            return 'tag:' + name;
        },
    };
    return exports;
});

以下是测试文件:

require('amd-loader');
var myTest = require('./LegacyModule');

test('Create where tag does not throw exception', () => {
    var request = myTest.CreateTag('test');
    expect(request.toBe('tag:test'));
});

以下是错误:

测试套件无法运行
无法将模块分配给与当前文件不同的id● 测试套件无法运行

Can not assign module to a different id than the current file

  1 | define('LegacyModule',
> 2 |     function () {
    |                 ^
  3 |         'use strict';
  4 |         var exports = {
  5 |

  at Object.<anonymous>.global.define (node_modules/amd-loader/amd-loader.js:39:15)

共有1个答案

徐英锐
2023-03-14

amd-loader库似乎无法正常工作。它在此行抛出一个错误:

// id is 'LegacyModule' while mod.id is a full file name of a Jest unit test
// they don't match and error is thrown
if (typeof id === "string" && id !== mod.id) {
        throw new Error("Can not assign module to a different id than the current file");
}

但是,我能够使用Jest模拟define(),而不使用amd loader库,并从amd代码中提取函数。

global.define = jest.fn(); // declare 'define' function
require('./LegacyModule'); // AMD module will call define(id, implementation)
const LegacyModule = global.define.mock.calls[0][1]; // gets 'implementation'
const myTest = LegacyModule();

test('Create where tag does not throw exception', () => {
    var request = myTest.CreateTag('test');
    expect(request).toBe('tag:test');
});
 类似资料:
  • 问题内容: 我有一段代码,我不知道如何进行单元测试!该模块使用urllib2从外部XML提要(twitter,flickr,youtube等)中提取内容。这是一些伪代码: 我的第一个想法是腌制响应并加载它以进行测试,但是显然urllib的响应对象是不可序列化的(它引发了异常)。 仅从响应主体保存XML是不理想的,因为我的代码也使用标头信息。它旨在作用于响应对象。 当然,在单元测试中依赖外部数据源是

  • 我想找到一种方法对我的定制nginx模块进行单元测试,但失败了。有人能提供一些建议吗?我曾经找到过Test::Nginx框架,但它可以作为系统测试。有人告诉我,我可以使用ngx_lua_模块通过FFI的方式在nginx模块中公开C函数。有人知道怎么做吗?

  • 我有一个示例方法(我需要编写测试用例)如下所示, 我想模拟getConfig方法并返回一个特定的字符串值。getConfig是Kotlin对象中方法,如下所示, 下面是我尝试的测试 我没有得到任何错误,但是getConfig方法没有被嘲笑。执行实际的实现。我也试过使用Powermockito。请帮帮我

  • 问题内容: 我需要为AngularJS编写一个自定义模块,但是我找不到关于该主题的任何好的文档。如何为AngularJS编写一个可以与他人共享的自定义模块? 问题答案: 在这种情况下,您认为文档无法再为您提供帮助,一个很好的学习方法是查看其他已经构建的模块,看看其他人是如何做到的,他们如何设计架构以及如何将它们集成到其中。他们的应用。 在查看其他人的工作之后,您至少应该有一个起点。 例如,看看任何

  • 我想为上面的内容编写单元测试,以测试我正在使用的注释的sampleURL,比如如果我给出任何应该与regex模式匹配的URL。我浏览了以下链接:如何在spring中进行单元测试验证注释,如何使用JUnit测试类的验证注释?但它们没有多大帮助,我也有setSampleURL函数。那么,如何为sampleURL变量编写测试呢。基本上,我想为regex模式编写测试,即我给sampleURL的值是否与re

  • 问题内容: 我已Spring Boot启用基本身份验证的应用程序。从数据库消耗。为了进行单元测试,我想对其进行模拟,以便从其他地方使用数据。 我该怎么做? 我的问题不是如何模拟自身,而是如何模拟使用它来通过基本身份验证测试Controller的方式。 以下是我的SpringSecurity配置: 总之,我怎么能嘲笑UserServiceDetails到SpringSecurity配置,所以我能单元