在承诺中反应测试批量数据
React testing bulk data within promises
我对反应还很陌生,在测试方面更陌生。
我有一个 json 数据数组的验证函数。
输入包含数据以及每个参数的参数,指示验证是否应该失败。
describe('ValidatorFactory', () => {
it('should check data', () => {
let data = [{} ... ...];// data filled in from file.
for (let el of country.TestData) {
// Validate is defined elsewhere.
validate({value: el.value}).then(
() => {
expect(el.valid).to.be.true;
},
() => {
expect(el.valid).to.be.false;
});
}
}
当我 运行 mocha 时,我无法期望将此识别为失败测试。
它总是显示成功。不管我是否故意失败。
这是有效的测试代码吗?
总是 return 承诺链,当你完成它们时,这将允许任何调用代码(在本例中为 Mocha)进一步处理链。
看起来这是对您的代码的合理抽象:
// Example validator that will reject when `obj.value` equals 2:
function validate(obj) {
if (obj.value === 2) {
return Promise.reject(new Error("I hate 2's"));
} else {
return Promise.resolve();
}
}
describe('ValidatorFactory', () => {
it('should check data', () => {
let data = [
{ value : 1, valid : true },
{ value : 2, valid : false },
{ value : 3, valid : true }
];
return Promise.all(
data.map((el) => {
return validate(el).then(() => {
expect(el.valid).to.be.true;
}, () => {
expect(el.valid).to.be.false;
});
})
);
})
})
[Promise.all( data.map(...) )
代码是一个快捷方式:
let array = []
array.push( validate(data[0]).then(..., ...) );
array.push( validate(data[1]).then(..., ...) );
...
return Promise.all(array);
换句话说,它生成一个承诺数组,Promise.all()
将全部解决。
请注意 Promise.all()
有 "fail-fast" behaviour:如果它必须解决的承诺之一被拒绝,则由 Promise.all()
编辑的承诺 return 将被拒绝,因为好吧,马上。在这种情况下,当其中一个期望失败时会发生这种情况,我认为这是可以接受的。
编辑:作为替代方案,您可以使用 chai-as-promised
,它为 Chai 添加了 promise 支持:
const chai = require('chai');
const expect = chai.expect;
chai.use(require('chai-as-promised'));
...
return Promise.all(
data.map((el) => {
return expect(validate(el)).to.be[ el.valid ? 'fulfilled' : 'rejected' ];
})
);
我对反应还很陌生,在测试方面更陌生。
我有一个 json 数据数组的验证函数。 输入包含数据以及每个参数的参数,指示验证是否应该失败。
describe('ValidatorFactory', () => {
it('should check data', () => {
let data = [{} ... ...];// data filled in from file.
for (let el of country.TestData) {
// Validate is defined elsewhere.
validate({value: el.value}).then(
() => {
expect(el.valid).to.be.true;
},
() => {
expect(el.valid).to.be.false;
});
}
}
当我 运行 mocha 时,我无法期望将此识别为失败测试。 它总是显示成功。不管我是否故意失败。 这是有效的测试代码吗?
总是 return 承诺链,当你完成它们时,这将允许任何调用代码(在本例中为 Mocha)进一步处理链。
看起来这是对您的代码的合理抽象:
// Example validator that will reject when `obj.value` equals 2:
function validate(obj) {
if (obj.value === 2) {
return Promise.reject(new Error("I hate 2's"));
} else {
return Promise.resolve();
}
}
describe('ValidatorFactory', () => {
it('should check data', () => {
let data = [
{ value : 1, valid : true },
{ value : 2, valid : false },
{ value : 3, valid : true }
];
return Promise.all(
data.map((el) => {
return validate(el).then(() => {
expect(el.valid).to.be.true;
}, () => {
expect(el.valid).to.be.false;
});
})
);
})
})
[Promise.all( data.map(...) )
代码是一个快捷方式:
let array = []
array.push( validate(data[0]).then(..., ...) );
array.push( validate(data[1]).then(..., ...) );
...
return Promise.all(array);
换句话说,它生成一个承诺数组,Promise.all()
将全部解决。
请注意 Promise.all()
有 "fail-fast" behaviour:如果它必须解决的承诺之一被拒绝,则由 Promise.all()
编辑的承诺 return 将被拒绝,因为好吧,马上。在这种情况下,当其中一个期望失败时会发生这种情况,我认为这是可以接受的。
编辑:作为替代方案,您可以使用 chai-as-promised
,它为 Chai 添加了 promise 支持:
const chai = require('chai');
const expect = chai.expect;
chai.use(require('chai-as-promised'));
...
return Promise.all(
data.map((el) => {
return expect(validate(el)).to.be[ el.valid ? 'fulfilled' : 'rejected' ];
})
);