我一直在做一些mocha/chai测试,除了在每个'it'测试中放置一个循环并迭代一次和一次之外,我仍然没有找到一种在许多不同可能性上运行测试的好方法.问题是,如果我有数十或数百个测试,我不想一遍又一遍地写相同的for循环.
有更优雅的方式吗?特别是一个用不同的测试参数一次遍历所有测试的?
describe('As a dealer, I determine how many cards have been dealt from the deck based on', function(){
console.log(this);
beforeEach(function(){
var deck = new Deck();
var myDeck = deck.getCards();
});
it('the number of cards are left in the deck', function(){
for(var i = 1; i<=52; i++){
myDeck.dealCard();
expect(myDeck.countDeck()).to.equal(52-i);
}
});
it('the number of cards dealt from the deck', function(){
expect(myDeck.countDealt()).to.equal(i);
});
it('the sum of the cards dealt and the cards left in the deck', function(){
expect(myDeck.countDeck() + myDeck.countDealt()).to.equal(52)
});
});
Run Code Online (Sandbox Code Playgroud)
Vin*_*han 11
我在Loop Mocha测试中实现了neezer的解决方案?,包括将整个测试放入闭包并用循环执行.
请注意,循环在函数中使用beforeEach(),因为它每次测试执行52次.如果这些元素是动态的,并且每个循环不会执行多次,那么将元素放在beforeEach()函数中并不是一个好主意.
代码看起来像这样,它似乎工作.
var myDeck = new Deck(Card);
function _Fn(val){
describe('As a dealer, I determine how many cards have been dealt from the deck based on', function(){
myDeck.dealCard();
var cardCount = 0;
var dealtCount = 0;
cardCount = myDeck.countDeck();
dealtCount = myDeck.countDealt();
it('the number of cards are left in the deck', function(){
expect(cardCount).to.equal(52-val);
});
it('the number of cards dealt from the deck', function(){
expect(dealtCount).to.equal(val);
});
it('the sum of the cards dealt and the cards left in the deck', function(){
expect(cardCount + dealtCount).to.equal(52);
});
});
}
for(var i = 1; i<=52; i++){
_Fn(i);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11663 次 |
| 最近记录: |