Javascript Jest-从矩时区模拟属性和函数
我试图用jest模拟属性Javascript Jest-从矩时区模拟属性和函数,javascript,jestjs,Javascript,Jestjs,我试图用jest模拟属性tz和函数,但我不知道如何同时模拟这两个东西: 如果运行以下操作: jest.mock('moment-timezone', () => () => ({weekday: () => 5})) jest.mock('moment-timezone', () => { return { tz: { } } }) 我可以模拟属性tz或指令moment()。我如何为这段代码编写一个模拟封面 const moment = re
tz
和函数,但我不知道如何同时模拟这两个东西:
如果运行以下操作:
jest.mock('moment-timezone', () => () => ({weekday: () => 5}))
jest.mock('moment-timezone', () => {
return {
tz: {
}
}
})
我可以模拟属性tz
或指令moment()
。我如何为这段代码编写一个模拟封面
const moment = require('moment-timezone')
module.exports.send = () => {
const now = moment()
moment.tz.setDefault('America/Sao_Paulo')
return now.weekday()
}
多亏了您可以利用的第二个参数,该参数允许您指定模拟模块的自定义实现以用于测试 在这个自定义实现中,您还可以定义一些方便助手来模拟预期的实现值(例如
weekday()
)
请注意,如果要模拟的模块有一个巨大的API表面,那么手动提供每个测试文件的模拟可能会变得乏味和重复。为了解决后一种情况,您可以考虑编写一些手动模拟使它们可重用(即使用<代码>
// send-module.test.js
jest.mock('moment-timezone', () => {
let weekday
const moment = jest.fn(() => {
return {
weekday: jest.fn(() => weekday),
}
})
moment.tz = {
setDefault: jest.fn(),
}
// Helper for tests to set expected weekday value
moment.__setWeekday = (value) => weekday = value
return moment;
})
const sendModule = require('./send-module')
test('test', () => {
require('moment-timezone').__setWeekday(3)
expect(sendModule.send()).toBe(3)
})