是否有人使用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魔法。当生态系统赶上新语法时,每个人现在都在处理不可靠的工作吗?
问题似乎在于巴贝尔,而不是玩笑。试试这个解决方案。
"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测试都能正常工作。
正如您所说,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