Last active
March 17, 2018 22:22
-
-
Save radovansurlak/526fe655cde6461bf9dc36dd2a5b9d85 to your computer and use it in GitHub Desktop.
Playing around with ES6, classes, and testing with Chai and Mocha
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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