当前位置: 首页 > 面试题库 >

从同一个模块调用存根模块功能

空枫涟
2023-03-14
问题内容

我想不出一种方法来对从定义此函数的同一模块中调用的函数进行存根(存根似乎不起作用)。这是一个例子:

myModule.js:

'use strict'

function foo () {
  return 'foo'
}

exports.foo = foo

function bar () {
  return foo()
}

exports.bar = bar

myModule.test.js:

'use strict'

const chai = require('chai')
const sinon = require('sinon')

chai.should()

const myModule = require('./myModule')

describe('myModule', () => {
  describe('bar', () => {
    it('should return foo', () => {
      myModule.bar().should.equal('foo') // succeeds
    })

    describe('when stubbed', () => {
      before(() => {
        sinon.stub(myModule, 'foo').returns('foo2') // this stub seems ignored
      })

      it('should return foo2', () => {
        myModule.bar().should.equal('foo2') // fails
      })
    })
  })
})

这让我想起了(几乎)不可插拔的Java静态函数。

知道如何实现我要做什么吗?我知道foo在另一个模块中进行提取将起作用,但这不是我在这里尝试做的。我也知道,调用foobar方法与关键字this也将工作中,我逐步使用困惑this
在这方面(因为我没有使用OOP)。


问题答案:

我刚刚测试过。它就像魅力。

'use strict'

function foo () {
  return 'foo';
}

exports.foo = foo;

function bar () {
  return exports.foo(); // <--- notice
}

exports.bar = bar;

说明

当你做sinon.stub(myModule, 'foo').returns('foo2')那么sinon存根的exported对象是foo不是真正foo从内部功能myModule.js......因为你必须知道,foo在访问从模块外。因此,设置后exports.foo,导出的对象exports.foo将存储的引用foo。当您致电时sinon.stub(myModule, 'foo').returns('foo2')sinon将存根exports.foo而不是实际的foo

希望这有道理!



 类似资料:
  • 我正在尝试测试一个es6类,但我不知道如何用sinon存根一个函数模块。测试不是sm下的覆盖线。callSoap函数 我试试这个: module.js index.js(这是模块的索引) my-class.js test.js 我尝试在soapModule上存根,但生成了以下错误: 无法存根不存在的自己的属性call Soap

  • 在我们前面的例子中,我们开始看到了。 我们的根模块有一个组件,一个管道和一个服务,其唯一的目的是处理信用卡。 如果我们将这三个元素提取到自己的功能模块,然后将它们导入我们的根模块怎么办? 我们将这样做。第一步是创建两个文件夹以区分属于根模块的元素和属于要素模块的元素。 注意每个模块文件夹下的模块文件: app.module.ts 和 credit-card.module.ts.。让我们先关注后者。

  • 问题内容: 在我的angularJS应用程序中,我有两个模块:模块A和模块B。 如何在模块B中调用该函数? 问题答案: 您需要在 模块A中 定义一个工厂: 然后使用 模块B中* 的工厂: *

  • 模块功能 nomodule 禁用内核模块加载功能(CONFIG_MODULES)。 [KNL] module.sig_enforce 强制内核在加载模块时检查模块签名(CONFIG_MODULE_SIG),并且只接受具有合法签名的模块。如果内核开启了CONFIG_MODULE_SIG_FORCE,那么无论是否使用此选项,都将强制检查模块的签名。

  • 一、简介 本主要介绍PHPCMS内置相关模块的标签调用方式 二、目录 内容模块 评论模块 投票模块 公告模块 专题模块 会员模块 友情链接模块 企业黄页

  • 问题内容: 假设我有一个名为的软件包,其中包含: 和: 然后我执行以下脚本: 这是我的期望: 这是我得到的: 谁能解释我的误解? 问题答案: 您正在使用。在导入模块的全局范围(或​​发生import语句的任何范围)中成为符号。 当您为指定新值时,您也只是在更改哪些值点,而不是实际值。尝试直接使用in导入,并通过设置在那里进行实验。这样,您实际上将在此上下文中修改哪个是“实际”值。 它有点令人费解,