编程语言
首页 > 编程语言> > 在Javascript ES6中使用Chai(或Should)声明数组(使用Babel)

在Javascript ES6中使用Chai(或Should)声明数组(使用Babel)

作者:互联网

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

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.jschai things进行此测试:

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",
    }
}

断言数组时如何解决此未定义的错误?

== ==编辑

我已经进行了2个测试(使用和不使用babel),以确认在这种情况下Babel是问题所在.他们来了:

1.无通行证测试

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();
   });

});

结果:测试通过

2.用通天塔测试

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();
   });
});

结果:错误:TypeError:无法读取未定义的属性“某物”

解决方法:

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

看来Bergi在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();
   });
});

标签:chai,javascript,ecmascript-6,babeljs
来源: https://codeday.me/bug/20191011/1895127.html