Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jest-从矩时区模拟属性和函数_Javascript_Jestjs - Fatal编程技术网

Javascript 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

我试图用jest模拟属性
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)
})