【发布时间】:2015-07-20 09:04:32
【问题描述】:
我正在尝试测试一个数组,例如:
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 运行 mocha 测试,我使用了 babel-hook:
(in package.json)
{
"scripts": {
"test": "./node_modules/.bin/mocha --require babelhook --reporter spec",
}
}
在断言数组时如何解决这个未定义的错误?
==编辑==
我进行了 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();
});
});
结果:测试通过
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();
});
});
结果:错误:TypeError: Cannot read property 'something' of undefined
【问题讨论】:
-
你是说没有babel就不会报错?
-
你是如何为 chai 导入
things插件的? -
@Bergi :我用 2 个场景(有和没有 babel)编辑了这个问题。问题来自 Babel(已确认),您可以在编辑中看到我如何包含
chai-things -
不确定这是否会有所不同,但不应该您调用
chai.should而不是将其存储在变量中? -
@Bergi 不幸的是它没有任何区别
标签: javascript ecmascript-6 chai babeljs