Skip to content

Instantly share code, notes, and snippets.

@radovansurlak
Last active March 17, 2018 22:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save radovansurlak/526fe655cde6461bf9dc36dd2a5b9d85 to your computer and use it in GitHub Desktop.
Save radovansurlak/526fe655cde6461bf9dc36dd2a5b9d85 to your computer and use it in GitHub Desktop.
Playing around with ES6, classes, and testing with Chai and Mocha
const l = console.log;
chai.should();
mocha.setup('bdd');
// Pre-config ⇡⇡⇡⇡⇡
class MoneyTracker {
constructor() {
this.income = [];
this.expenses = [];
}
addExpense(name, amount) {
this.expenses.push({[name] : amount})
return this.expenses.slice();
}
addIncome(name, amount) {
this.income.push({[name] : amount})
return this.income.slice();
}
sumExpenses() {
let sum = 0;
this.expenses.map(expense => {
sum += expense[Object.keys(expense)[0]];
})
return sum;
}
sumIncome() {
let sum = 0;
this.income.map(income => {
sum += income[Object.keys(income)[0]];
})
return sum;
}
getDaysUntilSalary(date) {
let daysOfThisMonth = (new Date((new Date()).getFullYear(), (new Date()).getMonth()+1, 0)).getDate();
let dateToday = date && date.getDate() || new Date().getDate();
return daysOfThisMonth - dateToday + 16;
}
getDailyAllowance() {
return (this.sumIncome() - this.sumExpenses()) / this.getDaysUntilSalary();
}
}
let myTracker = new MoneyTracker();
myTracker.addIncome('salary', 1000);
myTracker.addExpense('rent', 330);
l(myTracker.getDailyAllowance());
l(document.querySelector('#allowance').innerText += myTracker.getDailyAllowance());
let assert = chai.assert;
describe('Budget tracker', () => {
it('should return 8700 after adding 29 items for "300" when running "sumExpenses()"', () => {
let testTracker = new MoneyTracker();
Array(29).fill().forEach(() => {
testTracker.addExpense('banana', 300);
})
assert.equal(testTracker.sumExpenses(), 8700);
});
it('should return "30" when running "getDaysUntilSalary()" on 17th of March 2018', () => {
let testTracker = new MoneyTracker();
let daysUntilSalary = testTracker.getDaysUntilSalary(new Date(2018, 4, 17))
assert.equal(daysUntilSalary, 30);
});
it('should return "3300" when running "sumIncome()" after adding 11 items into income', () => {
let testTracker = new MoneyTracker();
[...Array(11)].forEach(() => {
testTracker.addIncome('banana', 300);
})
assert.equal(testTracker.sumIncome(), 3300);
})
});
let testResults = mocha.run();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment