bingo-game-tests
Version:
A Bingo Game test suite
79 lines (66 loc) • 2.63 kB
JavaScript
/* global require */
var expect = require('chai').expect;
var BingoGame = require('../index')();
var NumberPicker = BingoGame.NumberPicker;
var numberPicker;
describe('The Number Picker', function () {
beforeEach(function () {
numberPicker = new NumberPicker();
});
describe('constructor', function () {
it('should be instantiable', function () {
expect(numberPicker).to.be.an.instanceof(NumberPicker);
});
it('should have no picked objects at start', function () {
expect(numberPicker.getPicked()).to.have.length(0);
});
});
describe('picking', function () {
describe('getPicked()', function () {
it('should return all picked objects', function () {
for (var i = 0; i < 90; i++) {
expect(numberPicker.getPicked()).to.have.length(i);
numberPicker.pick();
}
expect(numberPicker.getPicked()).to.have.length(90);
});
});
describe('getPickedNumbers()', function () {
it('should return all picked numbers', function () {
for (var i = 0; i < 90; i++) {
numberPicker.pick();
}
expect(numberPicker.getPickedNumbers()).to.have.members(Array(90).fill(0).map((e, i) => i + 1));
});
});
describe('pick()', function () {
it('should return a picked object', function () {
for (var i = 0; i < 90; i++) {
var picked = numberPicker.pick();
expect(picked)
.to.have.property('number')
.that.is.a('number')
.and.to.be.within(1, 90);
expect(picked)
.to.have.property('type')
.that.is.a('string')
.and.to.be.oneOf('BINGO'.split(''));
}
});
it('should pick a number not picked before', function () {
var before, after, picked;
for (var i = 1; i <= 90; i++) {
before = numberPicker.getPickedNumbers();
picked = numberPicker.pick().number;
after = numberPicker.getPickedNumbers();
expect(before)
.to.have.length(i - 1)
.and.not.include(picked);
expect(after)
.to.have.length(i)
.and.include(picked);
}
});
});
});
});