首页
学习
活动
专区
工具
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
  • 掌握JavaScript的异步编程,让你的代码更高效

    它就像一个单线程的小管家,时刻关注着各种事件,并在合适的时机执行相关的回调函数。每当一个异步操作开始时,小管家会安排一个回调函数,等操作完成后再来处理。这种机制让你的应用不会因为等待而卡住。...回调函数:灵活但易乱的工具 回调函数是异步编程中常见的操作,把一个函数作为参数传给另一个函数,等到某个事件发生时再调用它。...Promise:解决回调地狱的利器 Promise就像是异步操作的“保镖”,它会告诉你操作最终是成功了还是失败了。...3、并行处理异步操作 在开发Web应用时,有时我们需要同时请求多个数据源,以提升整体加载速度。使用Promise.all可以让多个异步操作并行执行,显著提高效率。...6、Observables和RxJS 在处理复杂的异步数据流时,Observables提供了一种强大的抽象方式。通过订阅数据流,你可以在新数据可用时收到通知。

    13210

    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测试的支持是最好的。同时它也可以很好的和现有库协同工作。

    3K20

    JavaScript中的Promises

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

    79620

    【译】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(),并且课已通过这个sinon的called方法判断函数是否被执行。

    2.6K20

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

    在微信小程序原生开发过程中,我不断发出这样的疑问「为什么堂堂技术人才多如牛毛的腾讯,会推出如此 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 方法可以为两个状态的改变注册回调函数...服务端:客户端我在,你要连接我么? 客户端:是的服务端,我要链接。

    39620

    useActionState,困扰了我整整两天

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

    72210

    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

    前端面试题分享001

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

    57540

    仅仅是 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.6K20

    挑选 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

    React 测试驱动教程

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

    4.6K20

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

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

    29810
    领券