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

为什么即使属性不存在,我的expect().to.have.property()也会传递?

即使属性不存在,expect().to.have.property()也会传递的原因是因为在使用Chai库进行断言时,Chai会通过Object.prototype.hasOwnProperty()方法来检查对象是否拥有指定的属性。这意味着即使属性不存在,Object.prototype.hasOwnProperty()方法仍然会返回false,而不会抛出错误。

Chai的expect().to.have.property()断言方法用于验证对象是否拥有指定的属性。如果属性存在,断言将通过;如果属性不存在,断言将失败。这种行为使得测试代码在验证属性存在时能够正常工作,并且在属性不存在时也不会抛出错误,从而提高了代码的健壮性和可维护性。

对于属性不存在的情况,Chai的expect().to.have.property()断言会返回一个特殊的标记值undefined,表示属性不存在。在这种情况下,你可以使用其他的Chai断言方法(如expect().to.be.undefined)来进一步验证属性的值。

总之,即使属性不存在,expect().to.have.property()断言仍然会传递,因为Chai库的设计决策是为了提供更灵活、更健壮的断言功能,以适应各种测试场景和对象结构。

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

相关·内容

Cypress系列(70)- server() 命令详解

命令执行结果 执行结果是 null 且后续不能再链接其他命令 没有参数的栗子 // 启动服务器 cy.server() 任何与 不匹配的请求都将传递到服务器,除非设置了 force404,这样请求变成...)或(XHR)的请求 带有参数的栗子 进入演示项目目录下 注:演示项目是 cypress 提供的,如何下载可看 Cypress 系列文章的一开始几篇都有写 cd C:\Users\user\Desktop...(res.status).to.eq(503) expect(res.responseBody.data).to.eq('Not success') expect...(res.responseHeaders).to.have.property('x-token', 'abc-123-foo-bar') }) }); }) 测试结果 ?...第二个请求虽然被路由监听到了,但是因为服务器关闭了,所以并没有获取路由的 status、response 注意事项 可以在启动 之前启动服务器 cy.server() cy.visit() 通常,应用程序在加载时可能会立即发出初始请求

47120
  • 要改掉的 10 种 TypeScript 坏习惯

    通常,即使在正式类型化中也会用到 any(例如,上面示例中的 response.json() 被 TypeScript 团队定义为 Promise)。 为什么应该纠正它 它基本上会禁用所有类型检查。...为什么应该纠正它 即使断言现在可以保存,当有人将代码移植到其他位置时这种情况也可能会改变。type guard 将确保所有检查都是明确的。 5....短期内不必担心其他属性。 为什么应该纠正它 放弃创建模拟会让我们付出代价,因为迟早会有一个属性更改会要求我们在所有测试中做更改,而不是一处改完全部生效。...同样,在某些情况下,被测代码会依赖于我们之前认为不重要的属性,然后我们就需要更新针对该功能的所有测试。 6. 可选属性 具体是什么意思 一些属性有时存在,有时不存在,就将它们标为可选。...将属性标记为可选而不是拆分类型做起来会更容易,并且生成的代码更少。

    51620

    以淘宝店铺为例,谈谈 TypeScript ESLint 规则集考量

    前言 ESLint 在项目中已经是大家见惯不惯的存在,你可能很厌烦动不动跳出来的 ESLint 报错,也可能很享受经过统一校验的工工整整的代码,无论如何,我的意见是,在稍微正式点的项目中都要有 ESLint...这里不会给出推荐的错误等级,即使全部是 warn,只要你打开了,至少你也会在以后心情好的时候来修对吧?(对吧?)...使用 {} 会让你寸步难行:类型 {} 上不存在属性 'foo',所以用了 {} 你大概率在下面还需要类型断言回去或者变 any,使用 object Function 毫无意义。...为什么:抛出的 Error 实例能够自动的收集调用栈信息,同时借助 proposal-error-cause[3] 提案还能够跨越调用栈来附加错误原因传递上下文信息,不过,真的会有人直接抛出一个字符串吗...)而非协变(covariance)的方式进行函数参数的检查,关于协变与逆变我后续会单独的写一篇文章,这里暂时不做展开,如果你有兴趣,可以阅读 TypeScript 类型中的逆变协变。

    2.7K30

    使用 React Testing Library 的 15 个常见错误

    接下来,我就一一盘点这些方法,解释为什么它们不是很好,以及如何改进测试以避免这些陷阱。 注:下面是重要程度的说明。...UI 交互行为,测试代码也会变得很难读,而且容易崩。...这里肯定有多人会吐槽说:要是别人改了文本的内容,你的测试不就崩了么?我对此的反驳是,首先,如果有人将 “UserName” 更改为 “Email”,这是我绝对想知道的变更(因为我需要更改我的实现了)。...好处是:即使元素的文本内容被其它不同元素分割了,它还是能够以此做查询。...建议:如果你想断言某个东西是否存在,那么就做显式的断言操作 总结 作为测试库工具系列的维护者,我们尽最大努力使 API 能够引导人们尽可能有效地使用,一些不足之处,我们会尝试正确地记录下来,即使这会非常地困难

    1.3K20

    实现Vue3响应式系统核心-MVP 模型

    无论读取的是哪一个属性,都会把副作用函数收集到“桶”里;当设置属性时,无论设置的是哪一个属性,也都会把“桶”里的副作用函数取出并执行。...下一步我们会对代码进行重构,先来体验一下单测的快乐。同时我们也来思考几个问题: 存储副作用函数的桶为什么使用了 WeakMap ?...但如果使用 Map来代替 WeakMap,那么即使用户侧的代码对 target没有任何引用,这个 target 也不会被回收,最终可能导致内存溢出。...}) 当 effect 注册的副作用函数执行时,会读取 obj.bar属性,它发现 obj.bar是一个访问器属性,因此执行 getter函数。...由于在 getter 函数中通过 this.foo 读取了 foo属性值,因此我们认为副作用函数与属性 foo之间也会建立联系。

    12410

    实现Vue3响应式系统核心-MVP 模型

    无论读取的是哪一个属性,都会把副作用函数收集到“桶”里;当设置属性时,无论设置的是哪一个属性,也都会把“桶”里的副作用函数取出并执行。...下一步我们会对代码进行重构,先来体验一下单测的快乐。同时我们也来思考几个问题: 存储副作用函数的桶为什么使用了 WeakMap ?...但如果使用 Map来代替 WeakMap,那么即使用户侧的代码对 target没有任何引用,这个 target 也不会被回收,最终可能导致内存溢出。...}) 当 effect 注册的副作用函数执行时,会读取 obj.bar属性,它发现 obj.bar是一个访问器属性,因此执行 getter函数。...由于在 getter 函数中通过 this.foo 读取了 foo属性值,因此我们认为副作用函数与属性 foo之间也会建立联系。

    13110

    【Vue】1979- 实现Vue3响应式系统核心-MVP 模型

    无论读取的是哪一个属性,都会把副作用函数收集到“桶”里;当设置属性时,无论设置的是哪一个属性,也都会把“桶”里的副作用函数取出并执行。...下一步我们会对代码进行重构,先来体验一下单测的快乐。同时我们也来思考几个问题: 存储副作用函数的桶为什么使用了 WeakMap ?...但如果使用 Map来代替 WeakMap,那么即使用户侧的代码对 target没有任何引用,这个 target 也不会被回收,最终可能导致内存溢出。...}) 当 effect 注册的副作用函数执行时,会读取 obj.bar属性,它发现 obj.bar是一个访问器属性,因此执行 getter函数。...由于在 getter 函数中通过 this.foo 读取了 foo属性值,因此我们认为副作用函数与属性 foo之间也会建立联系。

    13410

    接口测试工具简介!

    2、后端开发的接口数据类型和文档不一致,肉眼难以发现问题。 同样,测试在 JMeter 写好的测试用例,真正运行的时候也会发现各种不一致。 时间久了,各种不一致会越来越严重。 4....[201, 202]); }); 四、断言库的使用示例 Apifox 内置了ChaiJS作为断言库,以下是常用的断言测试脚本示例,但并非全部示例,更多用法请参考文档: ChaiJS expect BDD...3、断言深度等于某值,相当于deep.equal(value)的简写 pm.test('断言目标深度等于提供的 JSON', function() { pm.expect(data1).to.deep.equal...({ a: 1, b: 2 }).to.not.have.any.keys('c', 'd'); }); 8、断言目标对象是否包含指定属性 pm.test('Check if object contains...the property', function() { pm.expect({ a: 1 }).to.have.property('a'); }); 注意: 目标对象必须是 object、set、

    84720

    如何高效的进行接口测试?【工具篇】

    2、后端开发的接口数据类型和文档不一致,肉眼难以发现问题。 同样,测试在 JMeter 写好的测试用例,真正运行的时候也会发现各种不一致。 时间久了,各种不一致会越来越严重。 4...., 202]);});四、断言库的使用示例Apifox 内置了ChaiJS作为断言库,以下是常用的断言测试脚本示例,但并非全部示例,更多用法请参考文档: ChaiJS expect BDD library1...3、断言深度等于某值,相当于deep.equal(value)的简写pm.test('断言目标深度等于提供的 JSON', function() { pm.expect(data1).to.deep.equal...({ a: 1, b: 2 }).to.not.have.any.keys('c', 'd');});8、断言目标对象是否包含指定属性pm.test('Check if object contains...the property', function() { pm.expect({ a: 1 }).to.have.property('a');});注意:目标对象必须是 object、set、array

    3.8K30

    如何测试驱动开发 React 组件?

    让你自己决定测试用例是否对你的组件有帮助,会让测试用例变得有意义。...但是实际上,我将测试的组件还不存在。 首先通过 getByRole 方法 查找 role属性等于dialog能否文档中找到。...例如点击的按钮,就是 role="button" ;会让这个元素可点击;也可以使用 role 属性告诉辅助设备(如屏幕阅读器)这个元素所扮演的角色。...现在我们得到了我们想要的组件渲染的 HTML ,现在我想要确保我可以从外部传递这个组件的按钮的回调函数,并确保它们在单击按钮时被调用。...希望这篇文章对大家有所帮助,也可以参考我往期的文章或者在评论区交流你的想法和心得,欢迎一起探索前端。

    2.1K10

    如何测试驱动开发 React 组件?

    ,让你自己决定测试用例是否对你的组件有帮助,会让测试用例变得有意义。...但是实际上,我将要测试的组件还不存在。 首先通过 getByRole 方法 查找 role属性等于dialog能否文档中找到。...例如点击的按钮,就是 role="button" ;会让这个元素可点击;也可以使用 role 属性告诉辅助设备(如屏幕阅读器)这个元素所扮演的角色。...现在我们得到了我们想要的组件渲染的 HTML ,现在我想要确保我可以从外部传递这个组件的按钮的回调函数,并确保它们在单击按钮时被调用。...希望这篇文章对大家有所帮助,也可以参考我往期的文章或者在评论区交流你的想法和心得,欢迎一起探索前端。

    2.2K10

    【spock】单测竟然可以如此丝滑

    为什么人人都讨厌写单测 在之前的关于swagger文章里提到过,程序员最讨厌的两件事,一件是别人不写文档,另一件就是自己写文档。这里如果把文档换成单元测试也同样成立。...既然这么多好处,为什么还会讨厌他呢?至少在我看来,单测有如下几点让我喜欢不起来的理由。...另外不要误以为我学这门框架,还要多学一门语言,成本太大。其实大可不必担心,你如果会 groovy 当然更好,如果不会也没有关系。...后面 "test add" 是你单元测试的名称,也可以用中文。最后重点说明的是 expect 这个关键字。expect 字面上的意思是期望,我们期望什么样的事情发生。...想用的类直接注入进来就可以了,但是要注意的是这里只能算功能测试或集成测试,因为在跑用例时是会启动 spring 容器的,外部依赖也必须有。

    1.4K30

    用Jest来给React完成一次妙不可言的~单元测试

    但是,互联网时代也急剧地改变了许多软件设计,开发和发布的方式。开发者面临的问题是,需求越来越多,应用越来越复杂,时不时会有一种失控的的感觉,并在心中大喊一句:“我太南了!”。...如果你不是很熟悉单元测试,可能会任务两种都很好。但是实际上 Enzyme 的实现有两个误报的风险: •即使代码损坏,测试也会通过。•即使代码正确,测试也会失败。 让我们来举例说明这两点。...•getByText:搜索具有文本节点的所有元素,其中的textContent与作为参数传递的给定文本匹配。•getByTitle:返回具有与作为参数传递的给定文本匹配的title属性的元素。...•getByPlaceholderText:搜索具有占位符属性的所有元素,并找到与作为参数传递的给定文本相匹配的元素。...事实上,它甚至是任何测试用例的一般结构。我在这里向您展示这个是因为我发现测试库如何方便地在每个部分中编写测试是一件很有趣的事情。

    15K33

    Vue 测试速成班

    在你快要完成一个项目时,突然工程里的很多地方都出现了 bug,你修完一个又冒出新的一个,就像在玩打地鼠游戏一样……几轮下来,你会感到一团糟。...在本教程中,我将向你展示如何为 Vue 应用程序编写单元、集成和端到端测试。 有关更多测试示例,可以查看我的 Vue TodoApp 实现[1]。 1....但是,为什么我们不能只写单元测试呢?因为金字塔上端的测试可以帮助我们检查系统里的各个组件之间是否能很好地协同工作,使我们对系统更有把握。...我们可以随时通过 state 属性检查当前状态。 当使用组件的 store 时,我们必须将局部 Vue 实例和 store 实例传递给 mount 函数。...(text).to.eql('/modify'); }); 我们也可以在 mocks 中定义一个 $store 属性来 mock store。

    2.7K10

    用 Jest 进行 JavaScript 测试

    Jest 是目前最受欢迎的测试运行器之一,也是 Create React App 的默认选择。 首先要做的事情:我怎么知道要测试些什么? 当谈到测试时,即使是简单的代码块也会使初学者瘫痪。...最常见的问题是“我怎么知道要测试些什么?”。如果你正在编写 Web 应用,那么一个好的起点就是测试应用的每个页面和每个用户交互。但 Web 应用也由单元代码组成,如函数和模块,也需要进行测试。...一个超级重要的客户端需要一个函数来过滤一个对象数组。 对于每个对象,我们必须检查名为“url”的属性,如果属性的值与给定的术语匹配,那么我们应该在结果数组中包含匹配的对象。...根据规范,测试中的函数应该省略其 url 属性与给定搜索项不匹配的对象。...即使它与 JavaScript 无关,我也建议阅读 Harry Percival 的使用 Python 进行测试驱动开发【https://www.obeythetestinggoat.com/】。

    2.7K30
    领券