如何使用Sinon正确模拟require('uuid / v1')

时间:2019-06-09 07:51:49

标签: javascript mocking sinon

schema.js

const uuid = require('uuid');
.......
const sessionId = uuid.v1();

schema.test.js

const uuid = sinon.mock(require('uuid'));
.......
uuid.expects('v1').returns('00000000-0000-0000-0000-000000000000');

上面的方法非常有效,sessionId获得了0000.....的值。

但是,schema.js文件实际上看起来像这样:

const uuidv1 = require('uuid/v1');
.......
const sessionId = uuidv1();

应该如何schema.test.js才能使sessionId获得0000.....的值?

const mockUuid = sinon.mock(require('uuid/v1'));
........
mockUuid.returns('00000000-0000-0000-0000-000000000000');

返回TypeError: mockUuid.returns is not a function

const mockUuid = sinon.mock(require('uuid/v1'));
........
mockUuid.expects().returns('00000000-0000-0000-0000-000000000000');

也不起作用。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,只是重构了代码以使其更易于测试。我只是将导入从const uuidv1 = require('uuid/v1');更改为const uuid = require('uuid');,并将代码中被调用的位置从let newUuid = uuidv1();更改为let uuid.v1();

这使我能够像您在第一段中那样进行单元测试。编写测试的一部分是重构代码以使其更易于测试,因此我认为这种方法没有问题。