【问题标题】:How to mock require('uuid/v1') correctly with Sinon如何使用 Sinon 正确模拟 require('uuid/v1')
【发布时间】:2019-10-24 01:20:45
【问题描述】:

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');

也不行。

有什么想法吗?

【问题讨论】:

    标签: javascript mocking sinon


    【解决方案1】:

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

    这让我可以像您的第一段一样进行单元测试。编写测试的一部分是重构代码以使其更易于测试,所以我不觉得这种方法有问题。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-27
    • 2015-11-10
    • 1970-01-01
    • 2022-01-05
    • 2015-07-06
    • 2019-03-24
    • 2017-01-20
    • 1970-01-01
    相关资源
    最近更新 更多