Tests suggesting function is not returning an object

Tell us what’s happening:
I’ve implemented and sanity checked my code but as I run it in FCC, tests are failing saying that function

checkCashRegister

is not returning an object.

Your code so far


const REGISTER_STATUS = { closed: 'CLOSED', insufficient_funds: 'INSUFFICIENT_FUNDS', open: 'OPEN' }
const currencyDictionary = {
'PENNY': .01,
'NICKEL': .05,
'DIME': .10,
'QUARTER': .25,
'ONE': 1,
'FIVE': 5,
'TEN': 10,
'TWENTY': 20,
'ONE HUNDRED': 100
}

function checkCashRegister(price, cash, cid) {
let cashRegister = { status: '', change: cid };
let changeDue = (cash - price).toFixed(2);
let cashInRegister = getCashRegisterTotal(cid).toFixed(2);
let finalChange = {};
// if cash register has less than change due, equal to change due, and more than change due
if (changeDue > cashInRegister) {
  finalChange['status'] = REGISTER_STATUS.insufficient_funds;
  return finalChange;
} else if (changeDue === cashInRegister) {
  finalChange['status'] = REGISTER_STATUS.closed;
  finalChange['change'] = cid;
  return finalChange;
} else {
  change = calculateChange(changeDue, cid);
  finalChange['status'] = REGISTER_STATUS.open;
  finalChange['change'] = change;
}
console.log(finalChange);
return finalChange;
}

function getCashRegisterTotal(cid) {
let totalCash = 0;
for (let i = 0; i < cid.length; i++) {
  let currentCurrency = cid[1];
  totalCash += currentCurrency[1];
}
return totalCash;
}

function calculateChange(changeDue, cid) {
let change = [];
for (let i = cid.length - 1; i >= 0; i--) {
  let currencyArray = cid[i];
  let currencyName = currencyArray[0];
  let currencyTotal = currencyArray[1];
  let currencyValue = currencyDictionary[currencyName];
  let currencyAmount = (currencyTotal / currencyValue).toFixed(2);
  let currencyAmountToGive = 0;

  while (changeDue >= currencyValue) {
    changeDue = (changeDue - currencyValue).toFixed(2);
    currencyAmount--;
    currencyAmountToGive++;
  }
  if (currencyAmountToGive > 0) {
    change.push(currencyName, currencyAmountToGive * currencyValue);
  }
}
return change;
}


checkCashRegister(19.5, 20, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.1], ["QUARTER", 4.25], ["ONE", 90], ["FIVE", 55], ["TEN", 20], ["TWENTY", 60], ["ONE HUNDRED", 100]]);  

Your browser information:

User Agent is: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:80.0) Gecko/20100101 Firefox/80.0.

Challenge: Cash Register

Link to the challenge:

Hello~!

I loaded the code you provided into my end and I see a ReferenceError: change is not defined. Because your function is returning change, the tests see it return undefined which is not an object. :slight_smile: