描述错误
当导入到开发设置中时, import moment from 'moment'
可以让时刻有效地工作并完成我想要的一切。 但是,在运行通过调用moment()的代码运行的笑话测试时,出现以下错误:
“ TypeError:moment_1.default不是函数”
奇怪的是,以这种方式导入它: import * as moment from 'moment'
允许在测试中使用功能,但不能在生产中使用。 我仔细研究了jest的所有问题,这是一个已报道的问题,但是Jest团队有信心该问题已经解决。
重现
重现行为的步骤:
预期行为
在测试和生产中,力矩应该以相同的方式调用。
桌面(请完成以下信息):
特定时刻的环境
时刻-v 2.24.0
请在您的环境中运行以下代码,并包含输出:
导入矩时的控制台输出,以开发预期的方式进行,即从“矩”导入矩
console.log src/resources/timestamping.tsx:4
Tue Jul 16 2019 10:58:16 GMT-0400 (Eastern Daylight Time)
console.log src/resources/timestamping.tsx:5
7/16/2019, 10:58:16 AM
console.log src/resources/timestamping.tsx:6
240
TypeError: Cannot read property 'version' of undefined.
导入矩的控制台输出,如其在测试中的功能一样,即从* moment导入矩
console.log src/resources/timestamping.tsx:4
Tue Jul 16 2019 11:02:46 GMT-0400 (Eastern Daylight Time)
console.log src/resources/timestamping.tsx:5
7/16/2019, 11:02:46 AM
console.log src/resources/timestamping.tsx:6
240
console.log src/resources/timestamping.tsx:8
2.24.0
const moment = require("moment").default || require("moment")
是我想出的,但是只允许使用moment
作为函数。
//编辑
import * as mom from "moment";
const moment = require("moment").default || require("moment");
修复角度/笑话问题。 但这仍然是黑客。
lem 但这仍然是黑客。
谢谢您,先生,这有所帮助。
Moment.js方面可以在这里做什么?
我在使用ts-jest
处理打字稿和玩笑时遇到了这个问题。 我最终将babel与jest一起用于打字稿支持,但我不再面对它了。 也许ts-jest
库可能在做一些事情
经过更多搜索后,找到了解决方案
https://github.com/aurelia/skeleton-navigation/issues/606#issuecomment -397051406
需要在tsconfig.json中的compileOptions下传递"esModuleInterop": true
@DhrubajitPC很高兴您找到了解决方案。
您可以将其添加到我们的文档中吗?
https://momentjs.com/docs/#/use -it / typescript /
当然...给我一些时间:)
嗯...它似乎已经是常见问题解答的一部分
https://github.com/moment/moment/blob/develop/FAQ.md
似乎只有在将esModuleInterop设置为true时才会出现此错误。
@KonradLinkowski-黑客虽然有所帮助:)
最有用的评论
const moment = require("moment").default || require("moment")
是我想出的,但是只允许使用moment
作为函数。//编辑
修复角度/笑话问题。 但这仍然是黑客。