[英]Assert arrays using Chai (or Should) in Javascript ES6 (using 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'}
的元素 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: Cannot read property 'something' of undefined
第二个版本(与Babel一起使用)不起作用,因为您的测试忘记了调用chai.should()
。 在我的测试中,一旦添加了该方法调用,一切都会按预期进行(测试通过)。
似乎Bergi在此评论中是正确的。
如果这对您不起作用,似乎为了帮助您,我们需要更多信息。 提供您正在使用的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();
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.