首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我的Sinon侦察函数在promise then子句中调用时不起作用?

Sinon是一个用于JavaScript测试的库,它提供了各种功能来模拟和操纵测试中的对象和行为。在这个问题中,你提到了Sinon的侦察函数在promise then子句中调用时不起作用。

这个问题可能是由于异步操作的特性引起的。在promise的then子句中,代码是异步执行的,而Sinon的侦察函数可能无法正确地捕获到异步操作的调用。

为了解决这个问题,你可以使用Sinon的stub函数来替代侦察函数。stub函数可以创建一个替代函数,用于替代被测试代码中的某个函数,并且可以在需要的时候返回预定义的值或执行特定的操作。

下面是一个示例代码,展示了如何在promise then子句中使用Sinon的stub函数:

代码语言:javascript
复制
const sinon = require('sinon');

// 假设你的被测试函数是一个返回Promise的异步函数
function myAsyncFunction() {
  return new Promise((resolve, reject) => {
    // 异步操作
    setTimeout(() => {
      resolve('Success');
    }, 1000);
  });
}

// 创建一个stub函数来替代异步函数
const stub = sinon.stub().resolves('Mocked Success');

// 在测试代码中使用stub函数替代被测试函数
stub.then((result) => {
  console.log(result); // 输出 'Mocked Success'
});

// 调用被测试函数
myAsyncFunction().then(stub);

在这个示例中,我们使用Sinon的stub函数创建了一个替代函数,并使用resolves方法来指定在调用时返回的值。然后,我们在测试代码中使用这个stub函数替代了被测试函数,并在promise then子句中验证了返回的值。

需要注意的是,Sinon的stub函数只能用于替代函数,而无法直接替代对象的方法。如果你需要替代对象的方法,可以考虑使用Sinon的createStubInstance函数来创建一个替代对象。

希望这个答案能够帮助到你!如果你需要更多关于Sinon或其他云计算相关的问题,请随时提问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

提高代码质量——使用Jest和Sinon给已有的代码添加单元测试

现在,我们可以使用单元测试来提高自己代码质量。下面,将自己使用Jest和Sinon.js配置和编写单元测试中收获经验和踩到坑进行总结,根据从零开始配置和编写单元测试这一条线来进行分享。...为什么没有用其他单元测试框架 最开始框架选择中,先尝试了能够并行测试,大大提高单元测试速度ava框架。...; 项目中,主要是使用Sinon.js来模拟HTTP请求。...异步函数测试 异步函数主要分为两种——Callback方式和Promise方式。这两种方式都很简单,下面我们对两种方式进行具体介绍。详细内容可以见Jest文档中测试异步代码。...callback); // 发送请求来获取用户数据,成功后执行callback回函数 } // user.test.js import Sinon from 'sinon'; import userFunc

3.8K00

怎样编写更好 JavaScript 代码

为了解决回问题,JS 中增加了一个新概念 “Promise”。Promise 允许你编写异步逻辑,同时避免以前基于回代码嵌套问题困扰。...... } 也可以直接 await 一个 Promise,因为 async 函数实际上只是一个花哨 Promise 包装器。...箭头函数 => 箭头函数 JS 中声明匿名函数简明方法。匿名函数即描述未明确命名函数。通常匿名函数作为回或事件钩子传递。...】 展开操作符 提取一个对象键值对,并将它们作为另一个对象对象添加,是一种很常见情况。...文字模板(字符串模板) 字符串是最常见编程结构之一。这就是为什么它如此令人尴尬,以至于本地声明字符串许多语言中仍然得不到很好支持原因。很长一段时间里,JS 都处于“糟糕字符串”系列中。

1.3K30
  • Vue 测试速成班

    本教程中,将向你展示如何为 Vue 应用程序编写单元、集成和端到端测试。 有关更多测试示例,可以查看我 Vue TodoApp 实现[1]。 1....但是,为什么我们不能只写单元测试呢?因为金字塔上端测试可以帮助我们检查系统里各个组件之间是否能很好地协同工作,使我们对系统更有把握。...axios.post 将返回一个 promise,该 promise 被解析为带有 body 属性对象。...这个插件扩展了 Chai to.have.been 属性和 to.have.been.calledWith 方法。 如果我们返回一个 Promise,测试函数将变成异步。...总结 我们已经介绍完了所有的测试用例,从一个函数基本单元测试到实际浏览器中运行端到端测试。

    2.7K10

    为ES6配置JavaScript测试工具

    我们可以使用前文提到命令执行这个测试: mocha --compilers js:babel-register --require babel-polyfill 异步测试 通过传入回函数done就可以使用箭头函数编写异步测试...避免Sinon中使用箭头函数 与Mocha类似,Sinon.js中使用箭头函数也可能导致问题。 问题出在sinon.test上。...解决方案是要么使用sinon.test时避免使用箭头函数,要么通过beforeEach和afterEach来手工初始化和释放测试替身: var sandbox; beforeEach(() => {...('error message'); }); 要了解更多信息,请参考文章JavaScript单元测试中Promise:权威指南。...推荐Mocha。由于内建了对Promise支持,它对ES6测试支持是最好。同时它也可以很好和现有库协同工作。

    2.9K20

    JavaScript中Promises

    此外,你为什么要使用promises呢?与传统JavaScript操作回(callbacks)相比,它们有什么好处呢? 本文中,你将学习有关JavaScript中promises所有内容。...你将明白它们是什么,怎么去使用它们,以及为什么它们比回更受欢迎。 所以,promise是什么? promise是一个将来会返回值对象。.... #*$% 朋友,这就是对Promise剖析了。 JavaScript中,我们通常使用promises来获取或修改一条信息。当promise得到解决时,我们会对返回数据执行某些操作。...那么,我们来回答下一个问题 -- 异步JavaScript中为什么要使用promise而不是回呢?...你从回地狱(callback hell)一下切换到了链式乐土上。

    79420

    【译】JavaScript中Promises

    此外,你为什么要使用promises呢?与传统JavaScript操作回(callbacks)相比,它们有什么好处呢? 本文中,你将学习有关JavaScript中promises所有内容。...你将明白它们是什么,怎么去使用它们,以及为什么它们比回更受欢迎。 所以,promise是什么? promise是一个将来会返回值对象。.... #*$% 朋友,这就是对Promise剖析了。 JavaScript中,我们通常使用promises来获取或修改一条信息。当promise得到解决时,我们会对返回数据执行某些操作。...那么,我们来回答下一个问题 -- 异步JavaScript中为什么要使用promise而不是回呢?...你从回地狱(callback hell)一下切换到了链式乐土上?。

    1.4K20

    前端测试驱动开发模式(TDD)快速入门

    来源:http://www.ltesting.net 测试驱动开发(Test-Driven Development)是一种软件开发思维和方法,理解是它是一种开发循环,先写测试代码,再用最小代码实现这个测试...主要用来mock一些东西,比如可以用sinon mock一个假函数sinon也可以返回这个函数执行与否。...test": "mocha test/**/*.js" } 复制代码 test中建立一个js文件,文件中引入这些工具,为了连接sinon 和 chai,要使用到sinon-chai const chai...,第一个参数是范围名字,第二个是一个回函数,其中可以放单元测试代码 it()里写单元测试代码,第一个参数还是这个测试名字,第二个回函数中放入单元测试代码 assert 就是断言代码执行后结果是什么...,可以用sinon去模拟,使用方法:sinon.fake(),并且课已通过这个sinoncalled方法判断函数是否被执行。

    2.5K20

    强烈推介几个微信小程序开发小技巧,简单又实用

    微信小程序原生开发过程中,不断发出这样疑问「为什么堂堂技术人才多如牛毛腾讯,会推出如此 laji」,很多弱智反人类地方,两三年前社区就已经提出来,官方回复已经反馈正在修复中,但几年过去了,还是没有音信...// 请求成功回函数,res为回参数 }, fail: res => { // 请求失败回函数,res为回参数 } }) 如果我们将其 Promise 化...// 请求失败回函数,res为回参数 }) 并且 then 函数返回是一个 Promise 对象,让这个函数可以不断链式调用下去,所以首先需要 new 出来一个 Promise 对象: function...,使用时可以直接 wx.pro.xx,由于这个方法执行返回是一个 Promise 对象,因此可以像其它 Promise对象那样使用。...鉴于微信小程序开发时 setData 使用体验十分蹩脚,使用了个库函数 wx-updata,这个库函数开发时候对很有帮助,这里特意推介给大家。

    1.5K30

    Promise 原理探究

    前言:你真的了解Promise吗 你真的了解Promise吗?对而言,除了知道如何使用then解决回地狱以外,其他还真的一知半解。...当resolve调用callback时,then仍未被保存到callback中。 二、引入状态流转(v2) 通过状态流转,管理调用时序。...then早于resolve调用时:此时状态值仍是pending,因此可以保存onResolve回,等待resolve调用 resolve早于then调用时:保存决议值,状态流转为resolved;等待...完整版(v4) 完整版中,将加入以下特性 支持then链式调用,每次调用then均返回一个新promise 决议值为promise(非简单数值)以及 then返回promise时,需要反解出结果...·这三点 每次调用then均返回一个新Promise 反解内部promise then未传入任何回,透传上一promise决议值 第一题 为什么finalHandler执行顺序doSomethingElse

    2.3K70

    前端开发面试题自测_2023-02-27

    Promise理解 Promise是异步编程一种解决方案,它是一个对象,可以获取异步操作消息,他出现大大改善了异步编程困境,避免了地狱回,它比传统解决方案回函数和事件更合理和更强大。...如果改变已经发生了,你再对promise对象添加回函数,也会立即得到这个结果。这与事件(event)完全不同,事件特点是:如果你错过了它,再去监听是得不到结果。...Promise缺点: 无法取消Promise,一旦新建它就会立即执行,无法中途取消。 如果不设置回函数Promise内部抛出错误,不会反应到外部。...状态改变是通过 resolve() 和 reject() 函数来实现,可以异步操作结束后调用这两个函数改变 Promise 实例状态,它原型上定义了一个 then 方法,使用这个 then 方法可以为两个状态改变注册回函数...服务端:客户端,你要连接么? 客户端:是的服务端,要链接。

    39420

    15 个常见 Node.js 面试问题及答案

    为帮助 Node.js 开发人员更好面试,列出了 15 个常见 Node.js 和网络开发相关面试问题。 本文中,我们将重点讨论 Node.js 相关问题。...事件循环对事件队列中事件进行迭代,并安排何时执行其关联函数。 5. 流是什么? Stream 流是从源读取或写入数据并将其传输到连续流目标的管道。...传递给 setImmediate 函数将在事件队列上下一次迭代中执行。 另一方面,回传递给 process.nextTick 在下一次迭代之前以及程序中当前运行操作完成之后执行。...应用程序启动时,开始遍历事件队列之前调用它。 因此,回 process.nextTick 总是 setImmediate 之前调用。... Node.js 中,我们使用像 Sinon 这样库来实现(译者注,Sinon 测试中替换某部分代码,减少测试项编写复杂度 https://sinonjs.org)。 14.

    1.8K20

    useActionState,困扰了整整两天

    因为使用场景上,它和 useState 太类似了,类似到我花了很长时间都想不通,它到底为什么需要单独存在,因为它能做事情,useState 也能做,它到底有什么独特之处呢?...该回函数具体执行内容由 fn 定义 fn 接收当前状态和当前提交表单对象作为参数,它执行返回值决定了新状态值。...permallink 是一个 URL,主要运用于服务端,客户端组件中不起作用。...在前面我们已经可以明确 action 能力 1、我们可以 action 回函数中,获取到表单所有数据 2、action 回支持异步 3、我们可以使用 useFormStatus form...✓这个方式非常巧妙,否则将参数从父组件传入到组件内部 action 还会导致代码变得复杂 父组件中,我们定义好要显示列表和回函数 function Index() { const [carts

    37410

    挑选 npm 模块很费事?掌握这些技巧就能事半功倍!

    也可能你用例 / 需求不在下面的列表里。并没有每个分类下塞一堆选项,而是尽量精简,避免陷入分析瘫痪陷阱。...异步 Async(库): 你需要使用只支持回,不支持 Promise 旧版 Node 时选它 ES6 原生 Promise(原生 JS,不是 npm): 使用 Node 0.12 以上版本时用它...async/await(原生 JS,不是 npm): 你好容易逃离了回地狱,结果又掉进 Promise 地狱时候用它。...实用程序 / 杂项: Lodash: 需要 JS 实用程序库时使用。 你使用了大量 OOP。 Ramda: 你想用更加函数风格编程,用函数组合写代码时用它。...Chai-as-promised: 你需要针对 promise 断言库,但不想用 then 或 catch 时用它。 Sinon: 需要一个 mocking 库进行测试时使用。

    1.5K21

    前端面试题分享001

    所以下面的代码段中,当直接通过对象属性方法中去调用时,其都可以访问到对象属性,但是当其变为一个函数单独调用时,就访问不到对象属性了,而是从全局环境中找,所以变成未定义。...请看下面的代码执行结果.我们假设具有人类父原型,再假设男人原型。...,以及reject函数 – 支持then链式操作 – 支持异步关键,定义传入函数,并修改then函数 class Promise{ constructor(executor){...callback //存放成功回函数 this.onResolvedCallbacks = [] //存放失败回函数 this.onRejectedCallbacks = [] let resolve...然后我们高频操作滚动函数触发中分别进行了防抖以及节流函数绑定,时间间隔均为300ms,最终发现防抖函数只执行了一次,而节流函数进行了若干次。

    57340

    详解 JS 中事件循环、宏微任务、Primise对象、定时器函数,以及其在工作中应用和注意事项

    为什么会然想到写这么一个大杂烩博文呢,必须要从笔者几年前一次面试说起 当时年轻气盛,简历上放了自己博客地址,而面试官应该是翻了博客,好几道面试题都是围绕着博文来提问 其中一个问题,直接使得空气静止了五分钟...,确保尽可能快地响应 常见微任务 Promise.then/catch/finally Promise:当Promise状态改变时,会执行相应函数 async/await:使用async函数和...简单使用方式:requestAnimationFrame 只需要一个回函数作为参数,浏览器会自动计算出最适合用时间。...什么是 Promise 对象? 如何手写一个简易 Promise 对象? 为什么 Promise 比 setTimeout 快? Promise.all 和 Promise.race 有什么区别?...为什么要销毁定时器? 是 fx67ll.com,如果您发现本文有什么错误,欢迎评论区讨论指正,感谢您阅读!

    26110

    仅仅是 Promise吗?

    众所周知,async await 只是 Promise 语法糖,但具体是什么语法糖,自己之前也没细究。...昨天研究 iOS JavaScriptCore 里边如何捕获未处理 Promise rejection,发现 jscore 本身并不提供任何接口,只能想其他办法绕过去。...参考了 Egret Native 实现,发现他们实现和自己臆想也是吻合,就是 JS 侧对 Promise 做覆盖,或者叫 polyfill,这样就能完整掌控 Promise 实现和 reject...有个比较有趣点是,无论是 js 侧 polyfill 实现 Promise,还是浏览器原生 Promise,都可以接在 await 后,为什么呢?...Thenable 其实就是带有 then 方法对象,这个 then 方法应该接受两个参数,一个是 resolve 回,一个是 reject 回,类似 Promise then 方法。

    1.5K20

    React 测试驱动教程

    想活在一个没有这种感觉世界,但后来想想,这是不对。 本教程所有的代码都可以 github 仓库中找到。 让我们开始吧!...基础层面上而言,在运行 react 应用时, 会在处理你代码和服务前后,只生成一个 bundle.js 客户端。 因为它是一个非常强大工具,所以我们会常常用到。...接下来让我们测试一个组件安装和调用函数,当它安装时,我们可以得到一些暴露在 sinon信息和正在使用 spies。...我们可以假装 Root 组件有一个组件叫 CommentList,安装后将调用任意。当通过给定 props 组件安装时,函数被调用,因此我们就可以测试这个场景。...通常,当我开发 React 应用时,我会选择使用已经构建好 starter kit,方便省事。非常推荐开发时用 starter kit。

    4.6K20

    社招前端常见面试题(附答案)

    代码如下:Promise.reject(new Error(“错了,请原谅俺!!”))...第一个回函数Promise对象状态变为resolved时调用,第二个回函数Promise对象状态变为rejected时调用。其中第二个参数可以省略。...不过catch方法还有一个作用,就是执行resolve回函数时,如果出现错误,抛出异常,不会停止运行,而是进入catch方法中。...或catch指定函数以后,都会执行finally方法指定函数。...= Person发生 new 构造函数用时,会将创建新对象 [Prototype] 链接到 Person.prototype 指向对象,这个机制就被称为原型链继承方法定义原型上,属性定义构造函数上首先要说一下

    51030
    领券