如何在Jest中模拟属性(path.sep)

时间:2019-04-29 11:43:39

标签: properties mocking jestjs

我需要测试一个模块在Windows和Linux下是否都可以工作。该模块正在解析路径,并且取决于操作系统,该路径包含正斜杠或反斜杠。它使用path.sep确定使用哪个斜杠。在我的测试案例中,我想测试两个操作系统。我的问题是我无法弄清楚如何更改path.sep的值,因为它是属性而不是函数。

我想念什么吗?如何模拟path.sep属性?我希望有人可以对此有所了解。

1 个答案:

答案 0 :(得分:1)

这是一个简单的工作示例:

code.js

const path = require('path');

export const func = () => path.sep === '/' ? 'foo' : 'bar';

code.test.js

const path = require('path');
import { func } from './code';

test('func', () => {
  path.sep = '/';
  expect(func()).toBe('foo');  // Success!

  path.sep = '\\';
  expect(func()).toBe('bar');  // Success!
});

如果您使用它,看起来也可以使用

import path from 'path';

...但是它(至少在我的环境中)不起作用

import * as path from 'path';

(由于path当前不是ES6模块,因此编译器必须做一些工作才能使ES6导入语法正常工作,并且import * as path from 'path';必须以一种打破上述方法的方式进行编译。)