【问题标题】:Using mocha and chai to test outputs which are arrays使用 mocha 和 chai 测试作为数组的输出
【发布时间】:2018-04-20 20:07:47
【问题描述】:

我是测试 Javascript 的新手,所以这可能是完全显而易见的。我正在使用框架 Mocha 和断言库 Chai 来测试 Javascript 工具。

我有几个函数可以输出一个包含多个元素的数组。如何使用 Chai 进行测试?

这是一个例子:

var chai = require('chai');
var assert = chai.assert;
var expect = chai.expect;

// define an array
var Arr = [3, 4, 5, 6, 10];

console.log(Arr.slice(1, 3))
// outputs [4, 5]

// this will fail
describe('subsetting an array', function() {
  it('array subset', function() {
    assert.equal(Arr.slice(1, 3), [4, 5])
  });
});

所以这个测试失败并出现以下错误:

AssertionError: expected [ 4, 5 ] to equal [ 4, 5 ]

(1) 为什么assert.equal() 会失败?这些都是“数组”类型的数据结构

(2) 应该如何用 Chai 正确测试这一点?

【问题讨论】:

标签: javascript arrays unit-testing mocha.js chai


【解决方案1】:

assert.equal() 使用== 测试比较,并假设slice() 创建了一个新数组,虽然两者的元素数量相同,但它们不是同一个元素(它们实际上是两个不同的数组,包含相同的整数)

我认为你应该使用eql 方法

// Target array is deeply (but not strictly) equal to [1, 2]
expect([1, 2]).to.eql([1, 2]).but.not.equal([1, 2]);

看看eqlequal之间有区别

如果你想坚持断言,我认为(我这里没有控制台来测试它)你可以使用deepEqual

assert.deepEqual({ tea: 'green' }, { tea: 'green' });

虽然不太确定它是否适用于数组

【讨论】:

  • 感谢您的帮助。我对“expect([1, 2]).to.eql([1, 2]).but.not.equal([1, 2]);”有点困惑。使用“.but.not.equal([1, 2])”添加了什么?
  • 只是为了让您看到 eql 和 equal 之间的区别。因为那个测试会通过,那是因为它不是“equal”而是“eql”。您的测试不需要该部分,只需使用 eql
猜你喜欢
  • 2013-04-11
  • 1970-01-01
  • 2018-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
  • 1970-01-01
  • 2015-12-01
相关资源
最近更新 更多