使用项目索引的单元测试数组
Unit testing array using items indexes
我正在对应用于数组并更改其项目状态的单元测试方法。这些项目具有不同的属性。
例如,我的数组如下:
var array = [{state: false}, {status: true}, {health: true}];
应用该方法后(项目顺序相关),我正在检查值是否已更改并且是我期望的值(我使用的是 mocha、chai):
expect(array[0]).to.have.property('state', true);
expect(array[1]).to.have.property('status', false);
expect(array[2]).to.have.property('health', false);
现在,假设我想向我的阵列中添加新的能源项目:
var array = [{state: false}, **{energy: true}**, {status: true}, **{energy: true}**, {health: true}];
我必须将测试的 0、1、2 索引更改为 0、2、4,并为我的新项目添加新测试。
什么是使用(或不使用)索引的好方法,以便每次添加新项目类型时,我都不必更改所有索引?
有一个用于 chai 的插件 chai-things 这使得它非常可读:
[{ a: 'cat' }, { a: 'dog' }].should.contain.a.thing.with.property('a', 'cat')
您可以根据按您期望的方式构建的模板测试您的结果。在下面的代码中,expected
是模板。
var chai = require("chai");
var expect = chai.expect;
var a = [{state: false}, {energy: true}, {status: true}, {health: true}];
var expected = [
{state: false},
{energy: true},
{status: true},
{health: true}
];
for (var i = 0, item; (item = expected[i]); ++i) {
expect(a[i]).to.eql(expected[i]);
}
您还可以这样做:
expect(a).to.eql(expected);
但是如果你这样做,Mocha 会产生一条完全没有信息的断言失败消息:expected [ Array(4) ] to deeply equal [ Array(4) ]
。在一个循环中一个一个地执行期望可以让你得到更好的消息。喜欢 expected { state: true } to deeply equal { state: false }
.
我正在对应用于数组并更改其项目状态的单元测试方法。这些项目具有不同的属性。 例如,我的数组如下:
var array = [{state: false}, {status: true}, {health: true}];
应用该方法后(项目顺序相关),我正在检查值是否已更改并且是我期望的值(我使用的是 mocha、chai):
expect(array[0]).to.have.property('state', true);
expect(array[1]).to.have.property('status', false);
expect(array[2]).to.have.property('health', false);
现在,假设我想向我的阵列中添加新的能源项目:
var array = [{state: false}, **{energy: true}**, {status: true}, **{energy: true}**, {health: true}];
我必须将测试的 0、1、2 索引更改为 0、2、4,并为我的新项目添加新测试。
什么是使用(或不使用)索引的好方法,以便每次添加新项目类型时,我都不必更改所有索引?
有一个用于 chai 的插件 chai-things 这使得它非常可读:
[{ a: 'cat' }, { a: 'dog' }].should.contain.a.thing.with.property('a', 'cat')
您可以根据按您期望的方式构建的模板测试您的结果。在下面的代码中,expected
是模板。
var chai = require("chai");
var expect = chai.expect;
var a = [{state: false}, {energy: true}, {status: true}, {health: true}];
var expected = [
{state: false},
{energy: true},
{status: true},
{health: true}
];
for (var i = 0, item; (item = expected[i]); ++i) {
expect(a[i]).to.eql(expected[i]);
}
您还可以这样做:
expect(a).to.eql(expected);
但是如果你这样做,Mocha 会产生一条完全没有信息的断言失败消息:expected [ Array(4) ] to deeply equal [ Array(4) ]
。在一个循环中一个一个地执行期望可以让你得到更好的消息。喜欢 expected { state: true } to deeply equal { state: false }
.