babel-jest ES2015导入声明

Jos*_*ley 5 node.js jestjs babeljs

有没有人用es2015语法编写茉莉/开玩笑测试?它需要多少垫/ /填充/分散?

我无法正确导入功能.我有一个模块: ..../utils/TweetUtils.js

'use strict';

export function getListOfTweetIds (tweets) {
  return Object.keys(tweets);
};
Run Code Online (Sandbox Code Playgroud)

和一个测试套件:

... ./__测试__/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();
  });
});
Run Code Online (Sandbox Code Playgroud)

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

Jasmine报道了这个:

- Expected: '' toBe: {
      default: {
          getListOfTweetIds: Function
      },
      getListOfTweetIds: Function
  }
Run Code Online (Sandbox Code Playgroud)

因此看起来导入语句正在做某事,但显然不是诚实地导入我的方法.当我使用命名函数语法导入时,我得到相同的结果: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魔术.当生态系统赶上新语法时,现在每个人都只是处理不稳定的解决方案吗?

ncu*_*ery 4

正如您所说,import语句被提升,这会导致 jest 自动模拟功能出现问题(在您告诉 jest 取消模拟之前模块已导入)。

TweetUtils.getListOfTweetIds已正确导入但被模拟,因此每个调用 return undefined。这就是为什么第三个期望失败了。

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

您必须使用require被测试模块的语法。代替

import * as TweetUtils from '../TweetUtils';
Run Code Online (Sandbox Code Playgroud)

经过

const TweetUtils = require('../TweetUtils');
Run Code Online (Sandbox Code Playgroud)

在修复之前,玩笑示例中的情况是相同的:jest#379