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

当Sinon的spy.threw()传递错误参数时,它的行为是否不符合预期?

当Sinon的spy.threw()传递错误参数时,它的行为是符合预期的。

Sinon是一个流行的JavaScript测试框架,用于创建测试替身(test doubles)和进行测试验证。spy.threw()是Sinon中的一个方法,用于模拟一个被调用的函数抛出异常的情况。

当我们使用spy.threw()时,我们可以传递一个错误对象作为参数,以模拟函数在执行时抛出异常。这样我们就可以测试代码在异常情况下的行为。

例如,假设我们有一个函数add(a, b),用于将两个数字相加并返回结果。我们可以使用Sinon的spy来监视这个函数,并使用spy.threw()来模拟函数在执行时抛出异常:

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

function add(a, b) {
  if (typeof a !== 'number' || typeof b !== 'number') {
    throw new Error('Invalid arguments');
  }
  return a + b;
}

const spy = sinon.spy(add);

// 模拟函数抛出异常
spy.threw(new Error('Custom error'));

// 调用被监视的函数
try {
  spy(2, '3');
} catch (error) {
  console.log(error.message); // 输出 "Custom error"
}

// 验证函数被调用
console.log(spy.called); // 输出 true

在上面的例子中,我们使用spy.threw()来模拟函数在执行时抛出异常。当我们调用被监视的函数时,它会抛出一个自定义的错误对象。我们可以通过捕获异常来验证函数在异常情况下的行为。

总结起来,当Sinon的spy.threw()传递错误参数时,它的行为是符合预期的,因为它允许我们模拟函数在执行时抛出异常,并测试代码在异常情况下的处理逻辑。

关于Sinon的更多信息和使用方法,您可以参考腾讯云的产品介绍链接地址:Sinon - JavaScript测试框架

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

相关·内容

使用mocha编写node服务单元测试

上述例子中用是assert语法,它是基于nodeassert模块进行扩展。 简单来说,断言库就是帮助我们去判断某些变量是否符合我们要求,并且在不符合时做出错误提示。...= null, '函数正常入参执行错误') 就是判断res是否不等于null。第一个入参表达式结果为false,表示不符合预期,这是测试用例不通过,会打印出第二个入参提示语。...当我们异步逻辑耗时较长,需要手动地调整这个超时时间。 我们可以在mocha启动传入timeout参数,或者在测试用例中显示声明该测试用例超时时间。...例如当我们需要对一个删除数据接口进行测试,我们不能真的去执行数据库删除操作来判断函数是否正常执行。这时候就需要引入sinon来帮助我们替换掉这些难以模拟逻辑。...我们也可以让替换函数主动抛出错误,来测试调用它函数是否可以正确处理异常: it('测试db操作失败', async function(){ const stub = sinon.stub(db,

3.9K20

Vue 测试速成班

测试目录不是硬连线,你可以用下面的命令行参数来修改: vue-cli-service test:unit --recursive 'src/**/*.spec.js' recursive 参数告诉测试运行器依据后面的通配符模式来搜索测试文件...需要引入某个组件进行测试,我们可以以相对路径引用 ../../../src/components/Footer.vue 或使用别名 @,路径开头 @ 符号表示对源文件夹 src 引用。...我们可以使用 find 选择器在渲染 DOM 中搜索并获取 HTML、文本、类名或原生 DOM 元素。如果搜索是一个可能不存在片段,我们可以使用 exists 方法判断它是否存在。...使用组件 store ,我们必须将局部 Vue 实例和 store 实例传递给 mount 函数。...:首先输入参数通过 POST 请求被发送,然后将该请求得到结果传递给 mutation。

2.7K10

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

实现所有的测试用例,代码也就完成了。 最近也在实践Tdd开发,和之前先开发,再自测方向不同,这次开发顺序是, 文档--->测试用例--->代码--->测试通过--->下一个测试用例。...,第一个参数是范围名字,第二个是一个回调函数,其中可以放单元测试代码 it()里写单元测试代码,第一个参数还是这个测试名字,第二个回调函数中放入单元测试代码 assert 就是断言代码执行后结果是什么...throw出错误,再用assert捕获这个错误,这样可以比较方便测试入参是否符合预期。...throws }) 复制代码 使用sinon模拟函数 如果需要模拟一个函数,可以用sinon去模拟,使用方法:sinon.fake(),并且课已通过这个sinoncalled方法判断函数是否被执行...let fn = sinon.fake() //生成一个模拟函数 assert(fn.called) //断言这个函数是否被执行 复制代码 小结 本文只是对Tdd一个简单介绍,适用于快速入门。

2.4K20

怎样编写更好 JavaScript 代码

我不知道 TS 本质上是否能比 JS 更少出现“错误”,不给我强烈认为,迫使开发人员首先定义接口和 API,从而产生更好代码是很有必要。...var 在处理方面有一些非常独特且有趣规则。var 作用域行为是不一致而且令人困惑,在 JS 整个生命周期中导致了意外行为错误。...箭头函数 => 箭头函数是在 JS 中声明匿名函数简明方法。匿名函数即描述未明确命名函数。通常匿名函数作为回调或事件钩子传递。...从本质上讲,确保你遵循关于“is”和“isn't”良好实践规则。因此 linters 本质上是固执,只要你代码不符合规则,linter 可能就会报错。 Prettier 是一个代码格式化程序。...Sinon 是一个可以做很多事库,但只有少数事情做得超级好。具体来说,涉及到 Spies 和 Stubs sinon非常擅长。功能集丰富而且语法简洁。

1.3K30

Go错误处理和Error日志打印实践

Go错误处理和Error日志打印实践 如何参数校验?...遵循:永不相信外部系统,永远相信内部系统 对前端/上游服务传来参数做最严格校验,不对传来参数有任何假设 对下游服务返回值做最严格校验,不对返回结果有任何假设 对内部系统做宽松校验,let...日志级别 打印标准 Fatal 一个或多个关键业务功能不符合预期,导致整个系统无法正常运行 Error 一个或多个功能不符合预期,导致部分功能无法正确运行 Warn 发生了不符合预期行为,但相关功能仍能正常运行...debug,配置conf文件路径以便控制是否打印debug日志 什么时候打印Error 日志?...其他业务error一律是warn级别,例如扣钱发现用户钱不够了这种业务错误 或不可信上游(例如前端)传来参数有问题 BadCase 1:打印并直接向上传递 err : = json.Unmarshal

21710

单元测试初体验

启用或禁用监视文件,这些文件被改变,执行测试。 autoWatch: true, // 该值是要启动和捕获浏览器列表。...Karma启动,它也会启动放置在这个设置中每个浏览器。一旦Karma关闭,它也会关闭这些浏览器。...sinon.js 中 spy 主要用来监视函数调用情况,sinon 对待监视函数进行 wrap 包装,因此可以通过清楚知道,该函数被调用过几次,传入什么参数返回什么结果,甚至是抛出异常情况。...var spy = sinon.spy(orginObj, 'launch'); spy.restore(); spy 使用完成后,切记把恢复成原始函数,就像上边例子中最后一步那样。...拥有 spy 提供所有功能,区别在于它会完全替换掉目标函数,而不只是记录函数调用信息。换句话说,使用 spy ,原函数还会继续执行,但使用 stub 就不会。

1.5K20

Python:异常处理详解,从基础到高级应用

")) 解释 在这个例子中,我们定义了一个parse_date函数,接收一个字符串参数date_str。...假设我们有一个函数parse_date,尝试解析一个字符串为日期,并处理可能出现ValueError异常。下面展示如何在其他部分代码中调用这个函数,同时如何根据函数返回值或行为进行逻辑处理。...函数调用处理逻辑 正常情况下调用:传递给parse_date字符串符合日期格式,函数将返回一个datetime对象。我们可以根据返回对象是否为None来判断函数是否成功执行。...异常情况下处理:如果传递字符串不符合预期日期格式,parse_date函数内部except块将被执行,打印错误信息并返回None。...这样做可以让调用者更好地理解发生了什么错误,并据此作出相应处理。 方法1:返回异常信息字符串 这种方法中,发生异常,函数不返回None,而是返回一个描述异常字符串。

30510

分享7个专业级JavaScript测试库,提高你工作效率

; } module.exports = myFunction; 当你想运行测试,可以在终端中运行以下命令: npx jasmine myFunction.spec.js 如果myFunction函数行为符合我们预期...如果函数行为与我们预期不符,那么测试就会失败,并显示一条描述失败原因消息。 以上就是对Jasmine库基本介绍和示例。你可以访问其GitHub页面获取更多信息和详细文档。...2、Sinon 这是一个独立库,用于在JavaScript测试中创建测试替身(侦查、桩和模拟)。通过提供工具来验证函数调用、控制行为等,帮助你编写隔离测试。...如果你应用行为符合我们预期,那么测试就会通过。...https://github.com/cucumber/cucumber-js 使用示例 Cucumber是一种行为驱动开发(BDD)工具,允许开发者用简洁、近乎自然语言文本语句(如英语)来描述应用程序行为

22220

实例入门 Vue.js 单元测试

官方文档中给出了非常清楚说法: 组件单元测试有很多好处:- 提供描述组件行为文档 - 节省手动测试时间 - 减少研发新特性产生 bug - 改进设计 - 促进重构自动化测试使得大团队中开发者可以维护复杂基础代码...1.4 测试用例 test case 为某个特殊目标而编制一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。 一般形式为: it('should ......可以通过清楚知道该函数被调用过几次、传入什么参数、返回什么结果,甚至是抛出异常情况。...测试场景中需要一个额外 组件,用来重现外部组件、向目标组件传递数据和方法,并检验目标组件是否正确修改了外部组件状态。...,还可以引入 sinon 相关方法检验传入参数等,写出更完备测试。

2.8K20

JavaScript报错

每种计算机编程语言都要独特一套错误处理与调试机制,每种错误都有对应错误类型,而错误发生,就会抛出相应类型错误对象。...TypeError(类型错误)对象用来表示值类型非预期类型发生错误传入函数操作数或参数类型并非操作符或函数所预期类型,将抛出一个 TypeError 类型错误。...ReferenceError(引用错误) 对象表明一个不存在变量被引用。当你尝试引用一个未被定义变量,将会抛出一个 ReferenceError引用错误 。...RangeError试图传递一个参数给一个范围内不包含该参数函数则会引发RangeError。 SyntaxError语法上不合法代码错误。...Javascript语言解析代码,Javascript引擎发现了不符合语法规范tokens或token顺序时抛出SyntaxError。可能是丢失运算符或者转义字符等(括号等没闭合)。

40120

互联网大厂服务端测试流程

可以发现5类错误,分别是语法错误,边界行为错误,经验错误,算法错误,部分算法错误 1 语法错误 这类语法错误,如果使用IDE环境,大多就能够直接发现,也有部分语法错误在编译阶段时会通过,而在运行阶段才能发现错误...下面有3个语法错误例子 1.1 参数少传 (以下函数需要传入2个参数) func test(a int,b int)(c int){ return a+b } test(1) //少传了1个参数...fmt.Println("hello world") }else{ fmt.Println("come on") } } 4 算法错误 指当前设计功能与预期完全不符合 比如设计一个抽奖算法...,有1000人进行抽奖,会触发大奖,但实际上1000人已抽奖并没有触发大奖,这就与预期完全不符合 5 部分算法错误 指当前设计功能与预期部分符合,但一些特殊场景下会出现不符合情况 如以下加法函数...git命令速查表 git常用命令 接口测试 到了第三步接口测试,这一步我们可以根据研发提供接口文档,传入指定参数到postman当中调用接口,看一下返回值当中每个字段是否符合预期 postman

1K21

Java一分钟之-Mockito:模拟对象测试

在Java单元测试领域,Mockito是一个广受好评模拟框架,使得开发者能够轻松创建和配置模拟对象,以便于在隔离环境中测试代码,尤其是那些依赖复杂或难以控制对象。...预期行为(Stubbing) 通过设置预期行为,你可以定义模拟对象在接收到特定方法调用时应如何响应,比如返回特定值或抛出异常。 3....验证(Verification) 验证是在测试结束后检查模拟对象是否预期那样被调用了正确方法和次数。 4....捕获(ArgumentCaptor) MockitoArgumentCaptor可以捕获方法调用时传递参数,这对于验证方法调用具体细节非常有用。 常见问题与易错点 1....不恰当模拟配置 错误地配置模拟对象返回值或行为,可能导致测试结果不符合预期。 解决方案:仔细配置每个模拟方法返回值和行为,确保它们与测试目标相符。 4.

13410

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

概述 在日常功能开发中,我们代码测试都依赖于自己或者QA进行测试。这些操作不仅费时费力,而且还依赖开发者自身驱动。在开发一些第三方依赖,我们也没有办法给第三方提供完整代码质量报告。...Jest与Sinon.js是什么 Jest是FaceBook推出一个针对JavaScript进行单元测试库,提供了断言、函数模拟等API来对你自己编写业务逻辑代码进行测试后。...Jest配置 安装依赖包 需要使用Jest,首先你需要进行安装,执行以下命令: npm install jest -D 如果你项目中存在.babelrc文件(使用了babel 6),不论你测试代码是否通过...'hjava' }); 从上面的示例中我们可以看到,针对同步纯函数,我们可以通过很简单单元测试模型来验证功能。...但是,在单元测试框架中,并不能够识别这种路径,就会出现Cannot find module 'xxx' from 'yyy'报错。

3.7K00

对 React 组件进行单元测试

前端开发一个特点是更多会涉及用户界面,开发规模达到一定程度,几乎注定了其复杂度会成倍增长。...断言(assertions) 断言是单元测试框架中核心部分,断言失败会导致测试不通过,或报告错误信息。...测试用例 test case 为某个特殊目标而编制一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。 一般形式为: it('should ......、传入什么参数、返回什么结果,甚至是抛出异常情况。...明确指定 PropTypes 对于一些之前定义并不清晰组件,可以统一引入 prop-types,明确组件可接收props;一方面可以在开发/编译过程中随时发现错误,另外也可以在团队中其他成员引用组件形成一个明晰列表

4.2K40

《JavaScript 模式》读书笔记(3)— 字面量和构造函数2

,没有改变this指向,导致污染了全局,并得到了不符合预期结果。...使用that   遵循命名约定一定程度上有助于避免忘记使用new所带来问题,但是命名约定只是一种建议,不具有强制保证正确行为。下面的模式可以确保构造函数行为总是表现出应有的预期。...,将会创建一个名为arguments对象,其中包含了传递给该函数所有参数。...Array(3); console.log(a.length); // 3 console.log(typeof a[0]); // "undefined"   上面的例子,向数组构造函数传递一个整数...虽然这种行为是有意义(数组也是对象),但对于排除错误却没有什么帮助。通常,需要知道某个值是否是一个数组。

32330

JavaScript 模式》读书笔记(3)— 字面量和构造函数2

,没有改变this指向,导致污染了全局,并得到了不符合预期结果。...使用that   遵循命名约定一定程度上有助于避免忘记使用new所带来问题,但是命名约定只是一种建议,不具有强制保证正确行为。下面的模式可以确保构造函数行为总是表现出应有的预期。...,将会创建一个名为arguments对象,其中包含了传递给该函数所有参数。...Array(3); console.log(a.length); // 3 console.log(typeof a[0]); // "undefined"   上面的例子,向数组构造函数传递一个整数...虽然这种行为是有意义(数组也是对象),但对于排除错误却没有什么帮助。通常,需要知道某个值是否是一个数组。

47730

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

单线程 Node.js 必须是非阻塞,以防止线程阻塞在需要很长时间才能完成任务上,事件循环负责实现这种非阻塞行为使用应用程序线程调度挂起任务。...相比之下,流量较大,多线程后端必须等待线程池中线程释放,才能为用户请求提供服务。利用 Node.js 非阻塞特性,用户请求不会在单个线程上挂起太长时间(只有在操作不是 CPU 密集型)。...传递给 setImmediate 函数回调将在事件队列上下一次迭代中执行。 另一方面,回调传递给 process.nextTick 在下一次迭代之前以及程序中当前运行操作完成之后执行。...例如,如果正在测试组件在预期测试部分之前有一个文件读取操作,则可以使用 stub 来模拟该行为并返回模拟内容,而不用实际读取文件。...在 Node.js 中,我们使用像 Sinon 这样库来实现(译者注,Sinon 在测试中替换某部分代码,减少测试项编写复杂度 https://sinonjs.org)。 14.

1.7K20
领券