gpt4 book ai didi

node.js - babel-jest ES2015 导入语句

转载 作者:搜寻专家 更新时间:2023-10-31 22:47:54 24 4
gpt4 key购买 nike

有人使用 es2015 语法编写 jasmine/jest 测试吗?它需要多少 shimming/polyfill/gerrymandering?

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

'use strict';

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

和一个测试套件:

…./__tests__/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 {getListOfTweetIds} from ‘../TweetUtils’;但是如果我使用默认语法:import getListOfTweetIds from ‘../TweetUtils’;第二个规范失败了 - 它不再是 typeof function,而是 typeof object//=> {default: Function}

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

如果我修改 TweetUtils.js 以使用 module.exports = function… 并使用 const myFunction = require('. ./TweetUtils'),但我并不觉得我在引导真正的 ES2015 魔法。在生态系统 catch 新语法的同时,每个人现在是否都在处理不稳定的变通办法?

最佳答案

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

TweetUtils.getListOfTweetIds 已正确导入,但它是模拟的,因此每次调用都会返回 undefined。这就是第三个期望失败的原因。

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

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

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

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

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

关于node.js - babel-jest ES2015 导入语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33882868/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com