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

Babel-jest ES2015导入语句

通和裕
2023-03-14

是否有人使用es2015语法编写jasmine/jest测试?需要多少填隙/填充胶/选区划分?

我无法正确导入函数。我有一个模块:../utils/TweetUtils.js

'use strict';

export function getListOfTweetIds (tweets) {
  return Object.keys(tweets);
};

和一个测试套件:

../../\uuuuu测试\uuuu/TweetUtils-test.js

'use strict';
jest.dontMock('../TweetUtils');
import * as TweetUtils from '../TweetUtils';

describe('Tweet utilities module', () => {

  it('has access to the TweetUtils methods', () => {

    let testObj = {a:'a',b:'b',c:'c'};
    // Passes
    expect(TweetUtils.getListOfTweetIds).toBeDefined();
    // Passes
    expect(typeof TweetUtils.getListOfTweetIds).toBe('function');
    // Fails
    expect(TweetUtils.getListOfTweetIds(testObj)).toBeTruthy();
  });
});

如果我用这样的东西将控制台输出破解到套件中:expect(“”).toBe(TweetUtils)

Jasmine报告说:

- Expected: '' toBe: {
      default: {
          getListOfTweetIds: Function
      },
      getListOfTweetIds: Function
  }

因此,import语句似乎在做一些事情,但它显然没有诚实地导入我的方法。当使用命名函数语法导入时,我得到了相同的结果:import{getListofWeetID}来自“../TweetUtils” 但如果使用默认语法:从“../TweetUtils”导入GetListOfWeetId 第二个规范失败-它不再是typeof function,而是typeof object//=

我一直在整理文档和未解决的问题。几个月来一直存在相关问题,但已知的问题似乎并不正确。我尝试导入jest.dontMock语句以避免提升,大约:https://github.com/babel/babel-jest/issues/16 但是没有骰子。

一切工作,如果我修改TweetUtils.js使用module.exports=函数.../TweetUtils'),但这并不像我在引导真正的ES2015魔法。当生态系统赶上新语法时,每个人现在都在处理不可靠的工作吗?


共有2个答案

太叔正文
2023-03-14

问题似乎在于巴贝尔,而不是玩笑。试试这个解决方案。

"babel-cli": "^6.26.0",
"babel-jest": "^22.4.1",
"babel-preset-react-app": "^3.1.1",

并更新. babelrc(如果不存在,请创建此文件):

{
"presets": [
    "@babel/preset-env",
    "@babel/preset-react"
      ]
}

现在,jest和npm测试都能正常工作。

柯易安
2023-03-14

正如您所说,import语句被挂起,这会导致jest自动模拟功能出现问题(在您告诉jest将其卸载之前,模块被导入)。

TweetUtils.getListofWeetId已正确导入,但已模拟,因此每个调用都返回未定义的。这就是为什么第三个期望失败的原因。

导入jest.dontMock语句可以工作(我测试了它),但对我来说它听起来很脏(您真的想为每个测试模块创建一个“dontMock模块”文件吗?)

您必须为测试的模块使用要求语法。替换

import * as TweetUtils from '../TweetUtils';

const TweetUtils = require('../TweetUtils');

在我修复它之前,在jest示例中也是一样的:jest#379

 类似资料:
  • 问题内容: 我有一个用ES6编写的node.js库(与Babel一起编译),在其中导出了以下子模块: 如果从我的主要项目中,我包括这样的图书馆 我可以看到正确的输出,并且可以按预期工作。但是,如果我尝试包含这样的库: 会的。 有人可以解释这里发生了什么吗?这两种导入方法不应该等效吗?如果没有,我想念什么? 问题答案: 正在请求一个具有所有“ lib”命名出口的对象。 被命名为exports,这就是

  • 我有3个不同的TS文件,在1个主TS文件中动态加载2个TS文件,如下所示 现在,在这两个TS文件中,我正在导入jquery和jquery父TS文件 我的tsconfig.json 所以我的问题是jquery文件加载3次还是只加载一次。

  • 问题内容: 我已经将一个现有的Java应用程序导入到我的工作区中。我看到,在应用程序中的不同包中存在具有相同名称的类。 例如,存在一个名为“ Status.java”的类,其中包含 当我尝试在一个类中同时使用它们时,例如如下所示 它开始在Eclipse中指出一个错误 该 进口com.bayer.frontlayer.dao.Status 碰撞与其他import语句 有没有解决这个问题而无需更改类的

  • 问题内容: 我用es6编写了一个模块,然后发布到npm,我想在另一个项目中使用它,所以我这样输入: 但这没有用: 这是我在webpack中的js加载器配置: 当我尝试导入非的模块时,babel效果很好。但是从导入模块,babel似乎不起作用? 问题答案: 请参阅babel文档: 注意:默认情况下,对node_modules的所有要求都将被忽略。您可以通过传递忽略正则表达式来覆盖它。 通常期望的是,

  • 问题内容: 我的项目中已经实现了其他相关问题中提供的解决方案,例如在.babelrc中包含正确的预设(es2015)。 我有两个项目(分别称为A和B),它们都使用ES6模块语法。在项目A中,我导入了通过npm安装的项目B,该项目位于node_modules文件夹中。当我为项目A运行测试套件时,出现错误: SyntaxError:意外的令牌导入 在此之前,项目B声称存在以下错误代码行: (函数(导出

  • 使用Jest测试Firebase功能,我遇到了导入的麻烦... console.log 我正在使用@Babel/core和@Babel/preet-env和Babel-jest package.json 我创建了一个babel.config.js文件 babel.config.js 我错过了什么?谢谢你的反馈 更新 我用Babel文档更新了我的配置。。。(v 7) console.log pack