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

Sinon存根错误:“尝试包装已包装的post”,即使我正在恢复

Sinon是一个流行的JavaScript测试工具,用于创建和管理测试中的存根(stubs)、模拟(mocks)和间谍(spies)。在使用Sinon进行测试时,有时可能会遇到"Sinon存根错误:“尝试包装已包装的post”"的问题。

这个错误通常是由于在测试中多次包装(wrap)了同一个函数或方法导致的。Sinon的包装功能允许我们在测试中替换原始函数或方法,并对其进行模拟或监视。然而,如果我们尝试对已经被包装的函数再次进行包装,就会出现这个错误。

解决这个问题的方法是在每个测试用例之前,使用Sinon的restore()方法来还原所有已经包装的函数。这样可以确保每个测试用例都从一个干净的状态开始,避免重复包装的问题。

以下是一个示例代码,展示了如何使用Sinon进行函数包装和还原:

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

// 假设我们有一个名为post的函数需要进行测试
function post(data) {
  // 执行一些操作并返回结果
  return 'Response';
}

// 创建一个测试用例
describe('Test post function', () => {
  let postStub;

  beforeEach(() => {
    // 在每个测试用例之前创建一个存根
    postStub = sinon.stub().returns('Mocked Response');
  });

  afterEach(() => {
    // 在每个测试用例之后还原存根
    postStub.restore();
  });

  it('should return mocked response', () => {
    // 使用存根替换原始函数
    const originalPost = post;
    post = postStub;

    // 执行测试
    const result = post();

    // 断言结果是否符合预期
    assert.strictEqual(result, 'Mocked Response');

    // 还原原始函数
    post = originalPost;
  });

  it('should return original response', () => {
    // 执行测试
    const result = post();

    // 断言结果是否符合预期
    assert.strictEqual(result, 'Response');
  });
});

在上面的示例中,我们使用sinon.stub()方法创建了一个存根,并使用sinon.stub().returns()方法指定了存根的返回值。在每个测试用例之前,我们都会创建一个新的存根,并在每个测试用例之后使用restore()方法还原存根。

这样,我们就可以在测试中使用存根来替换原始函数,并根据需要指定存根的行为。通过还原存根,我们可以确保每个测试用例都以干净的状态开始,避免了"尝试包装已包装的post"错误。

关于Sinon的更多信息和用法,请参考腾讯云的相关产品和产品介绍链接地址。

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

相关·内容

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

来源:http://www.ltesting.net 测试驱动开发(Test-Driven Development)是一种软件开发思维和方法,理解是它是一种开发循环,先写测试代码,再用最小代码实现这个测试...这样做有以下优缺点: 优点 在开始可以比较明确自己要做什么,把错误暴露在整个开发流程比较靠前位置,修改成本也比较小 在之后对代码优化过程中,因为有测试代码存在,可以更好优化代码,优化完之后再执行一遍代码...throw出错误,再用assert捕获这个错误,这样可以比较方便测试入参是否符合预期。...(badFn, 'this.commonDirectFn is not a function') // 再把包装函数传入throws }) 复制代码 使用sinon模拟函数 如果需要模拟一个函数...,可以用sinon去模拟,使用方法:sinon.fake(),并且课通过这个sinoncalled方法判断函数是否被执行。

2.5K20

单元测试初体验

下面主要描述一下搭建这套单元测试环境和开发所用技术,和具体 demo。...测试辅助工具 Sinon Sinon 是一个独立 JavaScript 测试 spy, stub, mock库,没有依赖任何单元测试框架工程。...您可以通过打开浏览器并访问Karma Web服务器正在侦听URL来手动捕获任何浏览器(默认情况下为http://localhost:9876/)。...sinon.js 中 spy 主要用来监视函数调用情况,sinon 对待监视函数进行 wrap 包装,因此可以通过它清楚知道,该函数被调用过几次,传入什么参数返回什么结果,甚至是抛出异常情况。...var spy = sinon.spy(orginObj, 'launch'); spy.restore(); 当 spy 使用完成后,切记把它恢复成原始函数,就像上边例子中最后一步那样。

1.6K20
  • 系统集成演变历史

    话虽如此,RPC有一个小问题,将其归因于它是第一次尝试解决当时非常新问题:实现是依赖于语言。...4、服务器存根将依次分解包(这也是用于从接收到序列化包中重新创建参数代码)。 5、服务器存根将执行服务器代码,传递接收到(现在解组)参数。...CORBA,朝着正确方向迈出了一步 CORBA诞生于90年代早期,作为弥补RPC和其他类似尝试留下鸿沟尝试。...他建议定义REST来利用HTTP特性,例如响应代码(2xx和3xx表示成功响应,4xx表示客户端错误,5xx表示服务器错误)、动词(例如GET、POST、PUT等)和其他。...它也可以作为一个简单“数据库包装”在某种意义上你创建一个服务,查询数据库和界面世界GraphQL,它也可以作为一个积分器,从多个远程数据源获取数据并结合在一起之前发送回客户机响应。

    1.3K30

    【韧性架构设计】软件韧性:从意外中恢复 7 个必备因素

    这里重点是,即使这是一项手动任务,它对于弹性软件也非常重要。想象一下,您正在更改电子商务网站支付网关。...当箱子从 QC 站运送到包装站时,将创建装运并打印运输标签。尽管盒子从 QC 到包装站需要几秒钟时间,但这足以让我们创建货物。如果某些发货失败,有一个简单重试选项,即按需致电快递员。...例如,API 中 GET 操作是幂等。这对于设计弹性系统很重要,让用一个例子来解释一下。 您正在设计一个 API 来将消息标记为读。...无论调用多少次 API 将单条消息标记为读,第一个都将其从未读设置为读,并且所有其他都不会更改状态。 这是一个易于理解幂等性示例。...类似于您家断路器,如果您软件系统多次无法访问另一个软件系统,它会破坏标记它打开电路。它会定期检查其他系统是否恢复。 当另一个系统恢复时,电路再次闭合。微软博客对断路器模式有很好解释。

    93830

    【读码JDK】-java.lang包介绍

    基本类型float包装类型 Throwable 所有错误和异常超类。...通常,编译器会捕获此错误; 如果类定义不兼容地更改,则此错误只能在运行时发生 IllegalAccessException 当应用程序尝试反射创建实例(数组除外),当前正在执行方法无法访问指定类字段...当调用发不正确调用方法时,抛出该异常 IllegalMonitorStateException 抛出此异常表示线程尝试在对象监视器上等待,或者在没有指定监视器情况下通知在对象监视器上等待其他线程...搜索类定义在编译当前正在执行类时存在,但无法再找到该定义 NoSuchFieldError 如果应用程序尝试访问或修改对象指定字段,并且该对象不再具有该字段,则抛出该异常。...抛出null ,它是Throwable值 NumberFormatException 抛出以表示应用程序尝试将字符串转换为其中一种数字类型,但该字符串没有适当格式 Number 提供数字值转换为基本数据类型

    1.6K20

    Swift基础 基础知识

    如果隐式解包可选选项为nil,并且您尝试访问其包装值,您将触发运行时错误。结果与您在不包含值正常可选选项后放置感叹号完全相同。...由于makeASandwich()可以抛出错误,函数调用被包装在try表达式中。通过将函数调用包装在do语句中,抛出任何错误都将传播到提供catch子句。...除了在运行时验证您期望外,断言和先决条件也成为代码中有用文档形式。与上面错误处理中讨论错误条件不同,断言和先决条件不用于可恢复或预期错误。...您可以在原型和早期开发期间使用fatalError(_:file:line:)函数,通过编写fatalError("Unimplemented")作为存根实现,为尚未实现功能创建存根。...由于致命错误永远不会被优化,与断言或先决条件不同,您可以确保如果遇到存根实现,执行总是会停止。

    15000

    Java包含两种异常checked异常和unchecked异常

    一些Java书籍(如Suns Java Tutorial)中建议在遇到可恢复错误时采用checked异常,遇到不可恢复异常时采用unchecked异常。...个人观点是,如果你只是包装异常但并不提供更多信息,那为什么要包装它呢?try-catch块就成了多余代码,没有做任何有意义事。...下面是unchecked代码包装版本。注意readNumberFromUrl()方法不声明抛出ApplicationException,即使它可能抛出该异常。     ...最近我们尝试在一个较大项目中使用unchecked异常,效果还不错。错误处理被集中在了少数几个类中。会有需要本地错误处理地方,而不是将异常传播给主错误处理代码。但是这种地方不会很多。...总之,建议使用unchecked异常。至少在一个工程中尝试过。总结了以下原因:   Unchecked异常不会使代码显得杂乱,因为其避免了不必要try-catch块。

    84020

    Jira API踩坑记

    本来以为在国内有很多公司都在用jira, 这里面少不了API接口进行功能性封装,肯定会有中文文档结果经过几次尝试搜索之后,终于确认jira API是没有中文文档。...使用一键翻译软件是浏览器自带尝试过一些,他们总是会把接口请求路径中英文单词也翻译成汉字,这简直就是不能看。...而且这些包装结构作用范围并没有在文档中标识出来,导致想去查一个参数,并不知道两个地方现在多个地方到底哪个地方有用只能去一各一各尝试,虽然对接文档工作已经完成了,但是对于文档中所标记参数以及传参格式部分字段依然稀里糊涂...会让付出更多时间和精力去纠正这些错误,如果再碰到非常复杂包装格式,就更让人恼火了。回到刚才提到过Jira api文档,有非常多个版本,如果文档出现错误,修复起来肯定也是比较多。...真是让感动痛哭涕零,这都什么玩意儿。 POST PUT 在之前工作当中,主要接触还是get和post接口。对于其他HTTP请求方式并不十分了解,也不太清楚这其中规范。

    1.4K20

    java setattribute_java – HttpSession setAttribute并不总是插入新对象「建议收藏」

    正在从WLS10g和 JavaEE6升级到WLS12c和JavaEE7....注意到HttpSession.setAttribute工作方式有所不同.在WLS10中,任何存储在某个键下对象都将被替换....更新2015-09-30: 向Oracle提交错误报告.尝试过wero建议过滤器想法.似乎Weblogic期望来自过滤器链对象属于weblogic.server.internal.ServletRequestImpl...类,因为当我将其包装并将包装器发送到过滤器链时,从内部Weblogic类获得了ClassCastException....还检查了Gimby建议配置选项.找不到会议任何适用选项.我们部署到单个服务器并使用内存作为会话持久性设置. 更新2016-02-03: Oracle已将错误报告关闭为“不是错误”.

    41010

    如何撰写精彩技术博客文章

    即使这个想法以前被写过,你也可以用自己视角,来阐述在你这种特定环境下不同做法。 2.想法不够有趣。 很多朋友和同事都不写,因为他们担心他们结论可能很无聊或显而易见。 这很正常啊!...即使说了这么多,在最后也很难预测什么样主题能成为一个精彩(火)文章,哪样不会,并且往往是坚持写或换个文章,而不是一个精彩主题。 主要建议是尝试写几个不同东西,看看哪些有用。...关于奖励,尝试将你文章发布到相关技术网站中,以便于他们帮助分享你文章 - 由此考虑,选择了 freeCodeCamp,因为认为这篇文章与他们读者有关。...如果你也想这样做,请按以下方式提交你文章。你感兴趣领域技术网站也可能正在寻找文章,所以不要害怕联系! 宣传 虽然你已经发布了文章,但是还没完事!...因此,即使第一篇,第二篇或第三篇文章没有成功,也要继续尝试东西,把你想法写出来,并随着时间推移而改进。 世界想要听到你要说的话。 去告诉他们!

    1.1K70

    Kotlin版图解Functor、Applicative与Monad

    “大人物可以使用具有任意数量参数函数,”它说。 “装备了 ($) 与 (*) 之后,可以接受具有任意个数未包装值参数任意函数。 然后传给它所有包装值,而我会得到一个包装值出来!...Monad 增加了一个新转变。 Functor 将一个函数应用到一个包装值上: ? Applicative 将一个包装函数应用到一个包装值上: ?...如果我们喂给它一个包装值呢? ? 我们需要使用 ))= 来将我们包装值塞进该函数。 这是 ))= 照片: ?...functor: 可通过 fmap 或者 ($) 将一个函数应用到一个包装值上。 applicative: 可通过 (*) 或者 liftA 将一个包装函数应用到包装值上。...monad: 可通过 ))= 或者 liftM 将一个返回包装函数应用到包装值上。

    1.2K20

    Python爬虫实现vip电影下载示例代码

    实现思路 1.选择一个合适vip解析网站,这里选择了无名小站接口,因为尝试了很多网站,有些网站想要爬取很困难,无名小站相对简单,接口为www.wmxz.wang/video.php?...url=[vip电影链接] 2.利用Fiddler进行抓包,模拟浏览器发送post请求,获取电影实际下载地址。 3.使用PyQt5进行包装,实现多样化功能。...(可选) 页面分析 使用Fiddler抓包,首先,浏览器进入接口,这里随便加一个vip电影链接,然后来看post请求: ?...url=[要下载vip电影] 采用输入链接方式来拼接get请求要访问url,顺便使用urllib库将输入链接编码,方便后面的post请求使用 headers1 = { 'User-Agent...这里就不详细讲了,PyQt5也比较简单,容易上手,如果需要的话联系吧。 总结 这是第一次写博客,如果哪里有问题请及时指出来,欢迎大家指正错误,此爬虫项目只用于入门,请不要用其盈利。否则,后果自负!

    3.9K20

    Java一分钟之-Spring Cloud Netflix Hystrix:容错管理

    断路器能够监控服务调用健康状况,当错误率超过阈值时自动打开,阻止进一步请求;线程隔离确保了一个依赖故障不会拖垮整个应用;fallback 提供了降级策略,当主逻辑失败时,可以执行备选逻辑。...断路器一直打开问题描述:即使服务恢复,断路器仍保持打开状态。...解决方案:检查Hystrix配置,合理设置断路器恢复策略,如circuitBreaker.sleepWindowInMilliseconds,确保断路器在一段时间后尝试重新关闭。2. ...Fallback策略不当问题描述:Fallback方法处理不当,返回不恰当默认值或错误信息。...正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

    12410

    创建 REST 服务简介

    REST 是面向资源。通常,资源由 URL 标识并使用基于 HTTP 方法操作,例如 GET、POST、PUT 和 DELETE。 REST 通常有少量开销。...虽然它可以使用 XML 来描述数据,但它更常用是 JSON,它是一种轻量级数据包装器。 JSON 使用标签标识数据,但标签没有在正式模式定义中指定,也没有明确数据类型。...API 管理工具生成实现类存根版本,然后可以扩展它以包含必要应用程序逻辑。 (逻辑当然可以调用此类之外代码。)%REST.Impl 类提供了可以调用方法,以便设置 HTTP 标头、报告错误等。...在每种情况下,这些存根方法都具有遵循 REST 服务规范定义契约签名。请注意,对于 options 方法, 不会生成存根方法供实现。相反,%CSP.REST 类会自动执行所有选项处理。...如果文件存在,则将其覆盖。

    57320

    Promise:为什么没有取消?

    即使如此,文章最后部分,还是会提供一些方法,来实现一下cancle。 设计哲学 设计理念 Promise设计初衷是为了简化回调函数使用,使得处理异步操作代码更加简洁和可读。...Rejected(拒绝) :表示异步操作失败,并返回了一个原因(错误)。 状态转换规则如下: 从Pending状态可以转换到Fulfilled状态。...Rejected(拒绝) :状态不可变。 Cancelled(取消) :状态不可变。 这种增加复杂性会导致以下问题: 状态转换冲突:需要明确地处理在Pending状态下多次转换情况。...例如,使用AbortController来取消网络请求,或者使用自定义Promise包装器来支持取消。.../post/7373986431850872869

    13010

    Jenkins 版本更新历史

    v2.204.1 (2019-12-28) 将鼠标悬停在侧栏链接上时,显示带有完整链接名称工具提示。 防止错误子任务提供者使构建永久运行。 修复"插件管理-安装"列表中卸载列排序。...v2.190.3 (2019-11-20) 稳定性: 不允许用户使用 POST 在需要提交表单 URL 上重新提交请求,因为那样无论如何都会失败。...内部: 发生错误时,hudson.util.ProcessTree.OSProcess#getEnvironmentVariables 返回 null ,即使它不应该发生也是如此。...解决使用 "记住" 时性能问题。(由 2.160 引入缺陷回归) 测试代理配置时不要抛出异常。...这简化了不使用更新中心专用安装方案兼容性,例如当从带有某些插件包装 Docker 镜像运行 Jenkins 时。

    3.5K30

    2019-1-29-wcf入门(9)

    本文demo上传至github:xinyuehtx/WCFdemo 这个博客会介绍如何设置服务异常回馈 ---- 多进程之间调试,或者是客户端/服务器联调,很麻烦一点是出了异常如何定位?...这里我们通过它将方法中异常,和方法名称做了封装。 ? 在服务实现中,我们通过抛出FaultException,将ServiceFault包装,传递给客户端 ?...可以看到异常成功输出 错误协定风险 聪明同学都已经注意到,我们刚刚试验操作协定是请求答复模式(同步方法)。那么对于单向模式会如何呢? 我们尝试将IsOneWay设置为True ?...小结 我们研究了WCF服务错误协定,其特点有 可以将服务端指定错误回馈客户端,通过简单包装可以传递所有托管异常基本信息 协定传递对象需要可以被数据协定序列化 不能处理单向操作 参考链接: 如何:...post/wcf%E5%85%A5%E9%97%A8-9.html ,以避免陈旧错误知识误导,同时有更好阅读体验。

    31520

    【软件架构】支持大规模系统设计模式和原则

    由于这种性质,无法深入研究每个主题,而只是提供一个概述。也就是说,在每个主题中,尝试添加有用链接,指向关于该主题更全面的资源。 所以让我们深入研究吧!...它是通过使用 if 检查功能标志是否启用(或者,通过检查相关 kill-switch 标志是否禁用)条件来控制功能来实现。...此外,如果我们启用了功能标志并且我们在系统中看到了新错误,则很容易禁用该标志并“恢复正常”,这从操作角度来看是一个巨大胜利。 舱壁(Bulkhead) 隔板是船底隔间之间分隔墙或屏障。...我们还避免共享配置:不同服务应该有自己配置设置,即使它需要某种重复,以避免一个服务中配置错误影响不同服务情况。...一个示例可以是在我们正在运行 A/B 测试中发布指标,以提供有关分配到实验不同单元用户见解 小轶事:在为 Netflix 工作日子里,和我团队所做一件事是开发 Watson,使团队能够通过创建程序化运行手册从已知场景中自动修复他们服务

    56520
    领券