javascript - 如何使用 sinon 正确获取附加到全局的属性?

标签 javascript mocha.js sequelize.js sinon stub

我有一个在测试之前加载的 helper.js:

before(async function() {
    this.timeout(30000)
    global.db = require(`${process.cwd()}/models`)()
    ...

然后在我的测试中,我有:

describe.only('Phone Library', () => {
    let updateCallSpy
    beforeEach(() => {
        sinon.stub(twilioClient.calls, 'create').resolves({})
        updateCallSpy = sinon.stub(global.db.models.Call, 'update').resolves(true)
            // sinon.stub(global.db.models.Conversation, 'update').resolves({})
    })

twilioClient.calls.create stub 正确。但 global.db.models.Call.update 却没有。

在我的实际代码中,我使用它的方式如下:

        await global.db.models.Call.update({ status: newCallStatus }, { where: { id: foundConversation.Call.id } })

当我console.log(global.db.models.Call)时,它只是输出Call。但是,.update 函数已经存在并且执行其应该执行的操作(更新的 Sequelize 模型)。

我确信这是非常明显的事情,因此任何指示将不胜感激。谢谢。

最佳答案

sequelize 模型方法由sequelize 核心定义为原型(prototype)

以下应该有效

updateCallSpy = sinon.stub(global.db.models.Call.prototype, 'update').resolves(true)

您还可以创建 stub 实例:

updateCallStubInstance = sinon.createStubInstance(global.db.models.Call)

关于javascript - 如何使用 sinon 正确获取附加到全局的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58473351/

相关文章:

javascript - 页面加载时的 HTML5 onpopstate

javascript - jQuery 选择器 -> 特定表中的所有 TD

javascript - 未捕获( promise 中): Error: Access Denied in IE11

javascript - 如何选择在使用 puppeteer 和 mocha 单击后显示的元素(如弹出框)?

javascript - 使用 mocha 进行测试时 findOne 不是函数

sequelize.js - 复杂的销毁查询

node.js - 如何使用 Sequelizejs 一起解决多个查询

javascript - 如何使用下划线js从对象数组中查找字符串?

javascript - 在 Node 下集成编译为javascript语言的正确方法?

arrays - 如何使用 Sequelize + PostgreSQL 将项目 append 到数组值