【问题标题】:Assert arrays using Chai (or Should) in Javascript ES6 (using Babel)在 Javascript ES6 中使用 Chai(或 Should)断言数组(使用 Babel)
【发布时间】: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.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 运行 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


【解决方案1】:

第二个版本(使用 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();
   });
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    相关资源
    最近更新 更多