在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.js和chai 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