Jest-在一次测试中恢复原始力矩函数



如何在一个测试中恢复或实现mock?我有一个功能:

const parser = (data)=>{
const now = moment().format('DD-MM-YYYY');
//more implementation
const parsedDate = moment(dateFromData).format('DD-MM-YYYY')
return {
date: isDateFromDataExists ? now : parsedDate
}
}

现在我想测试一下我的功能。当isDateFromDataExists为true时,我想返回当前年份(应该模拟(,但当isDateFromDataExists为false时,我希望返回parsedDate。当我嘲笑全球

jest.mock('moment', () => () => ({format: () => '01-01-2020'}));

我无法在一次测试中"解锁"。

我怎么能和Jest一起做这件事?

===编辑===

这是我的代码

const myParser = (single) => {
const obj = {};
const now = moment().format("DD-MM-YYYY");
obj.availableFrom = get(single, 'FreeFrom', '') !== '' ? moment(get(single, 'FreeFrom'), 'YYYY-MM-DD').format("DD-MM-YYYY") : now;
return obj;
}

这是我的测试

test('Return correct json when FreeFrom is empty', async () => {
const xmlData = fs.readFileSync(path.join(__dirname, './testData/1.xml'), 'utf8');
var jsonObj = parser.parse(xmlData, options, true);
const result = require('./testData/1.json');
expect(myParser(jsonObj)).toEqual(result);
});
test('Return correct json when FreeFrom is available', async () => {
const xmlData = fs.readFileSync(path.join(__dirname, './testData/2.xml'), 'utf8');
var jsonObj = parser.parse(xmlData, options, true);
const result = require('./testData/2.json');
expect(myParser(jsonObj)).toEqual(result);
});

我必须涵盖两个测试用例。

  1. 当FreeFrom不是空字符串时,用矩转换值。然后格式化为我的格式
  2. 当FreeFrom为空字符串时,请使用当前日期和时刻。然后格式化为我的格式

2的情况下。我想模拟当前日期,使测试独立于系统日期。

如评论中所建议,检查相关问题

以下是如何实现

let dateFromData = null;
let isDateFromDataExists = null;
const parser = (data) => {
const now = moment().format('DD-MM-YYYY');
const parsedDate = moment(dateFromData, 'DD-MM-YYYY').format('DD-MM-YYYY')
return {
date: isDateFromDataExists ? now : parsedDate
}
}
const {
core: {
beforeEach,
describe,
it,
expect,
run
},
} = window.jestLite;
describe("parser", () => {
beforeEach(() => {
const currentTimestamp = moment().valueOf();
moment.now = jestLite.core.jest.fn().mockReturnValue(currentTimestamp);
});
it("return current date when isDateFromDataExists is true", () => {
isDateFromDataExists = true;
const currentDate = moment().format('DD-MM-YYYY');
expect(parser().date).toBe(currentDate);
});
it("return parsed date when isDateFromDataExists is false", () => {
isDateFromDataExists = false;
dateFromData = "02-01-2003";
expect(parser().date).toBe(dateFromData);
});
});
run().then(result => {
console.log(result);
})
<script src="https://unpkg.com/jest-lite@1.0.0-alpha.4/dist/core.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.1/moment.min.js"></script>

最新更新