在 Javascript ES6 中使用 Chai(或 Should)断言数组(使用 Babel)

2023-12-14

我正在尝试测试一个数组,例如:

let projects = [
    {  
        "id": "55a75be01fa2c7ff76a2ce7a",
        "title: "Only-Ben",
        "other_keys": "that can contain objects or arrays"
    },
    {
        "id": "55a75be01fa2c7ff76a2ce7d",
        "title: "Only-Thomas"
    },
    {
        "id": "55a75be01fa2c7ff76a2ce7c",
        "title: "Other-Project"
    }
];

目标是测试数组

  • 包含一个有键的元素{title: 'Only Ben'}
  • 不包含有键的元素{title: 'Only Thomas'}

我目前正在使用chai.js and 柴的事情通过这个测试:

projects.should.include.something.that.deep.have.property('title', 'Only Thomas');

这是我的错误响应:

Uncaught TypeError: Cannot read property 'something' of undefined

为了让事情更清楚,我尝试运行 Chai Things 文档中给出的示例:

[{ a: 'cat' }, { a: 'dog' }].should.include.something.that.deep.equals({ a: 'cat' })

我仍然收到类似的错误响应:

Uncaught TypeError: Cannot read property 'something' of undefined

在我看来,这个问题可能是由使用引起的Babel。我的 Node 项目大量使用 ES6 语法,这就是我使用 Babel 的原因。为了使用 babel 运行摩卡测试,我使用了 babel-hook:

(in package.json)
{
    "scripts": {
        "test": "./node_modules/.bin/mocha --require babelhook --reporter spec",
    }
}

断言数组时如何修复此未定义错误?

==EDIT==

我做了 2 个测试(有和没有 babel)来确认 Babel 是这个场景中的问题。他们来了:

1. 不使用babel进行测试

var chai = require("chai");
chai.should();
chai.use(require('chai-things'));

describe('Array', function() {
   it('Test array', function(cb){
       [{ a: 'cat' }, { a: 'dog' }].should.include.something.that.deep.equals({ a: 'cat' })
        cb();
   });

});

Result: 测试通过

2.用babel测试

import chai from 'chai';
let should = chai.should;
let expect = chai.expect;
import chai_things from 'chai-things';
chai.use(chai_things);

describe('Array', function() {
   it('Test array', function(cb){
       [{ a: 'cat' }, { a: 'dog' }].should.include.something.that.deep.equals({ a: 'cat' })
        cb();
   });
});

Result: Error: TypeError: Cannot read property 'something' of undefined


第二个版本(使用 Babel)不起作用,因为你的测试忘记调用chai.should()。在我的测试中,一旦添加该方法调用,一切都会按预期工作(测试通过)。

贝尔吉似乎也是正确的this评论。

如果这对您不起作用,那么为了帮助您,我们似乎需要更多信息。提供源代码可能会有所帮助babelhook --compilers您正在使用的选项。 (从 Mocha 的编译器选项引用 Babel 的标准方法是mocha --compilers js:babel/register.)

这是我的测试代码:

import chai from 'chai';
chai.should();
import chaiThings from "chai-things";
chai.use(chaiThings);

describe('Array', function() {
   it('Test array', function(cb){
       [{ a: 'cat' }, { a: 'dog' }].should.include.something.that.deep.equals({ a: 'cat' })
        cb();
   });
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Javascript ES6 中使用 Chai(或 Should)断言数组(使用 Babel) 的相关文章

  • MobileSafari 的正确触摸按钮行为

    MobileSafari 通常具有不正确的 HTML 按钮行为 不正确的含义 不像 iOS 原生按钮 正确的按钮行为如下 用户触摸按钮 按钮突出显示 用户将手指拖出按钮 按钮变暗 用户将手指拖回按钮 按钮突出显示 用户将手指拖出按钮并释放
  • 在画布中心写入 (0,0)-HTML5

    I m currently developing a drawing app which allows the user to click and drag to determine the size of the shape and al
  • javascript 可以从父页面访问 iframe 元素吗?

    我的页面上有 iframe iframe 和父页面位于不同的域中 父页面上的 javascript 代码可以访问此 iframe 内的元素吗 如果页面来自不同的域 则不应该这样做 浏览器安全沙箱应该阻止这种类型的访问 当两个页面来自不同的时
  • 如何在 js.erb 中使用 Ruby 代码?

    我可以使用以下方式在模态中渲染部分内容escape javascript在js erb文件代码中 body append my modal modal show 但是 我似乎无法获得以下结果 console log ERB 将输出一个纯字符
  • JavaScript 中的负数到二进制字符串

    任何人都知道为什么javascriptNumber toString https developer mozilla org en US docs JavaScript Reference Global Objects Number toS
  • 各种 Javascript 优化项目如何影响 DOM 性能?

    通过 Tracemonkey Squirrelfish 和 V8 项目 大量 C S 计算机科学融入了 Javascript 这些项目 或其他项目 是否解决了 DOM 操作的性能问题 或者它们纯粹与 Javascript 计算相关 纯 DO
  • Javascript 字符串/整数比较

    我在 HTML 中存储一些客户端参数 然后需要将它们作为整数进行比较 不幸的是我遇到了一个我无法解释的严重错误 该错误似乎是我的 JS 将参数读取为字符串而不是整数 导致我的整数比较失败 我生成了一个错误的小例子 我也无法解释 运行时以下返
  • 如何在react中返回点击元素的属性?

    我想知道是否有一种简单的方法来获取单击元素的属性React js function App return
  • 如何使用React Native在屏幕上绘图?

    我正在尝试在 React Native 中实现一个 Android 绘图应用程序 我正在使用 PanResponder 但我不知道如何获取用户触摸的部分的坐标 我尝试过使用react native svg但我不知道该放在哪里PanRespo
  • 如何在 Chrome 中将 Set 转换为数组?

    如何将集合转换为数组 https stackoverflow com questions 20069828 how to convert set to array给出了将 Set 转换为 Array 的三个答案 目前在 Chrome 浏览器
  • 同心放射圆 d3

    我有一个等距值的数组 我用它来绘制同心圆 我想使用一种散发效果 本质上是 一旦最外面的圆的值超过最大值 就将其删除 并在中心添加一个新的圆来补偿 我不确定如何操作数据集来删除和添加新圆圈
  • 将jQueryUI datepicker附加到div(显示位置错误)

    我在输入上使用 jQueryUI datepicker 默认情况下 jQueryUI 会附加 ui datepicker div to the body该文件的 有问题的输入位于屏幕上的 弹出 div 中 这意味着该 div 之外的任何点击
  • GraphQL 错误字段类型必须是输入类型,但得到:

    这是突变 const createNotebook mutationWithClientMutationId name CreateNotebook inputFields token type GraphQLString details
  • 从数组中删除空字符串,同时保持记录而不循环?

    这个问题在这里被问到 从数组中删除空字符串 同时保留非空字符串的索引记录 https stackoverflow com questions 18113243 remove empty strings from array while ke
  • 如何使用javascript将数据存储在xml文件中?

    我是 javascript 新手 并在我的项目中使用它 因为我需要读取 xml 文件 然后在操作后我想将更新后的值存储回 xml 文件中 我成功从 xml 文件获取值 但无法存储值返回到 xml 文件 这是我尝试过的代码
  • 在 JavaScript/CoffeeScript 中确定一个数组是否包含另一个数组的内容

    在 JavaScript 中 如何测试一个数组是否包含另一个数组的元素 arr1 1 2 3 4 5 8 1 10 2 3 4 5 9 function name arr1 gt true 没有 set 函数可以执行此操作 但您可以简单地执
  • 汇总异常以保留模块

    我使用一个名为的汇总插件rollup plugin lit css转变 css文件转换成 javascript 模块 该插件非常简单 它本质上只是附加export default到文件 我的汇总配置使用preserveModules and
  • Google Maps API - 调整大小会生成空白区域

    我正在研究一个看起来非常简单的功能 但却引起了一些头痛 我使用 GIS 并将其与 Google 地图集成 其中一位客户要求能够打开一个仅显示地图的单独弹出窗口 打开窗口不是问题 但当我尝试扩展包含地图的 IFrame 的宽度时 为了适应窗口
  • 多个引导模式的滚动问题

    我有一个带有大量信息的模态页面 因此您需要滚动 该模式包含指向第二个模式的链接 When I 打开模态 1 单击链接打开模式 2 模式 1 保持在后台 然后关闭模式 2 以便我回到模式 1 modal 1 失去滚动 仍然有一个滚动条 但它不
  • 如何拦截javascript中innerHTML的变化?

    我需要拦截网页内单元格内容的任何更改 以下代码显示 addEventListener 不起作用 function modifyText alert var el document getElementById mycell el inner

随机推荐