首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >babel-jest ES2015导入语句

babel-jest ES2015导入语句
EN

Stack Overflow用户
提问于 2015-11-23 23:38:39
回答 2查看 2.3K关注 0票数 7

是否有人在使用es2015语法编写jasmine / jest测试?它需要多少光泽/聚脂/分色层?

我在正确导入函数时遇到了问题。我有一个模块:…./utils/TweetUtils.js

代码语言:javascript
复制
'use strict';

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

还有一个测试套件:

…./__tests__/TweetUtils-test.js

代码语言:javascript
复制
'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);

据茉莉花报道:

代码语言:javascript
复制
- Expected: '' toBe: {
      default: {
          getListOfTweetIds: Function
      },
      getListOfTweetIds: Function
  }

看来import语句正在做一些事情,但它显然没有诚实地导入我的方法。当我使用命名函数语法:import {getListOfTweetIds} from ‘../TweetUtils’;导入时,我得到了相同的结果,但是如果我使用默认语法:import getListOfTweetIds from ‘../TweetUtils’;,第二个规范失败了--不再是typeof function,而是typeof object // => {default: Function}

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

如果我修改TweetUtils.js以使用module.exports = function…并使用const myFunction = require(‘../TweetUtils’)将其带入套件,一切都会正常工作,但我并不觉得我在传递真正的ES2015魔力。当生态系统赶上新的语法时,每个人都只是在处理摇摇欲坠的工作吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-24 14:25:21

正如您已经说过的,import语句是挂起的,它会给jest自动模拟功能带来问题(在告诉jest取消模拟之前,这个模块是导入的)。

TweetUtils.getListOfTweetIds是正确导入的,但它是模拟的,所以每个调用都返回undefined。这就是为什么第三个期望失败的原因。

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

您必须对测试模块使用require语法。替换

代码语言:javascript
复制
import * as TweetUtils from '../TweetUtils';

通过

代码语言:javascript
复制
const TweetUtils = require('../TweetUtils');

在我修复之前,它在开玩笑的例子中是一样的:jest#379

票数 4
EN

Stack Overflow用户

发布于 2018-11-29 10:57:40

问题似乎与巴别尔有关,而非玩笑。试试这个解决方案。

如果您使用的是“创建-反应-应用程序”,那么安装这些dev依赖项:

代码语言:javascript
复制
"babel-cli": "^6.26.0",
"babel-jest": "^22.4.1",
"babel-preset-react-app": "^3.1.1",

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

代码语言:javascript
复制
{
"presets": [
    "@babel/preset-env",
    "@babel/preset-react"
      ]
}

现在,jest和npm测试都发挥了应有的作用。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33882868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档