Last 4 Metric Tests for QA - Metric Imperial Converter

Hello,

I’m having difficulty passing the last 4 tests, but my code functions as described and passes all unit and functional tests.

Code: Glitch :・゚✧
Live App: https://broadleaf-jealous-mine.glitch.me

It returns “invalid number”:

Screen Shot 2023-02-26 at 9.03.04 PM

It returns “invalid number and unit”:

Screen Shot 2023-02-26 at 9.03.20 PM

All 16 unit tests pass, all 5 functional tests pass

Screen Shot 2023-02-26 at 9.17.15 PM

Output from the feeCodeCamp tests:


Unit tests:

const chai = require("chai");
let assert = chai.assert;
const ConvertHandler = require("../controllers/convertHandler.js");

let convertHandler = new ConvertHandler();

suite("Unit Tests", function () {
  test("whole number input validation", function () {
    assert.equal(convertHandler.getNum("2mil"), 2);
    assert.equal(convertHandler.getNum("100kg"), 100);
  });

  test("decimal number input validation", function () {
    assert.equal(convertHandler.getNum("1.99 liters"), 1.99);
    assert.equal(convertHandler.getNum("2.5 kg"), 2.5);
  });

  test("fractional number input validation", function () {
    assert.equal(convertHandler.getNum("1/12 lbs"), 1 / 12);
    assert.equal(convertHandler.getNum("3/4 pounds"), 3 / 4);
  });

  test("fractional number with a decimal input validation", function () {
    assert.equal(convertHandler.getNum("3.4/12 km"), 3.4 / 12);
    assert.equal(convertHandler.getNum("3/4.1kilometers"), 3 / 4.1);
  });

  test("double fraction input validation", function () {
    assert.notEqual(convertHandler.getNum("2/3/4miles"), "2/3/4");
    assert.notEqual(convertHandler.getNum("4/3/4liters"), "4/3/4");
  });

  test("no number defaults to 1", function () {
    assert.equal(convertHandler.getNum("kg"), "1");
    assert.equal(convertHandler.getNum("miles"), "1");
  });

  test("valid input metric & imperial units", function () {
    assert.equal(convertHandler.getUnit("KG"), "kg");
    assert.equal(convertHandler.getUnit("MI"), "mi");
    assert.equal(convertHandler.getUnit("KM"), "km");
    assert.equal(convertHandler.getUnit("GAL"), "gal");
    assert.equal(convertHandler.getUnit("GAL"), "gal");
    assert.equal(convertHandler.getUnit("L"), "L");
    assert.equal(convertHandler.getUnit("LBS"), "lbs");
  });

  test("test for invalid input units", function () {
    assert.equal(convertHandler.getUnit("CM"), undefined);
    assert.equal(convertHandler.getUnit("RPM"), undefined);
  });

  test("test for conversion return units", function () {
    assert.equal(convertHandler.getReturnUnit("KG"), "lbs");
    assert.equal(convertHandler.getReturnUnit("MI"), "km");
    assert.equal(convertHandler.getReturnUnit("KM"), "mi");
    assert.equal(convertHandler.getReturnUnit("GAL"), "L");
    assert.equal(convertHandler.getReturnUnit("L"), "gal");
    assert.equal(convertHandler.getReturnUnit("LBS"), "kg");
  });

  test("test for units spelled out", function () {
    assert.equal(convertHandler.spellOutUnit("KG"), "kilograms");
    assert.equal(convertHandler.spellOutUnit("LBS"), "pounds");
    assert.equal(convertHandler.spellOutUnit("KM"), "kilometers");
    assert.equal(convertHandler.spellOutUnit("MI"), "miles");
    assert.equal(convertHandler.spellOutUnit("GAL"), "gallons");
    assert.equal(convertHandler.spellOutUnit("L"), "liters");
  });

  test("test for converting kg to lbs", function () {
    assert.equal(convertHandler.convert(2, "KG"), 4.40925);
    assert.equal(convertHandler.convert(5.567, "KG"), 12.27314);
  });
  test("test for converting lbs to kg", function () {
    assert.equal(convertHandler.convert(40, "LBS"), 18.14368);
  });
  test("test for converting km to mi", function () {
    assert.equal(convertHandler.convert(90, "KM"), 55.92355);
  });
  test("test for converting mi to km", function () {
    assert.equal(convertHandler.convert(100, "MI"), 160.934);
    assert.equal(convertHandler.convert(4 / 5, "MI"), 1.28747);
  });
  test("test for converting gal to liters", function () {
    assert.equal(convertHandler.convert(4, "GAL"), 15.14164);
  });
  test("test for converting liters to gal", function () {
    assert.equal(convertHandler.convert(5, "L"), 1.32086);
  });
});


Functional tests:

const chaiHttp = require("chai-http");
const chai = require("chai");
let assert = chai.assert;
const server = require("../server");

chai.use(chaiHttp);

suite("Functional Tests", function () {
  suite("GET request at /api/convert to convert", () => {
    test("10L Conversion to Gallons (Valid)", (done) => {
      chai
        .request(server)
        .get("/api/convert")
        .query({ input: "10L" })
        .end((err, res) => {
          assert.equal(res.status, 200);
          assert.equal(res.body.initNum, 10);
          assert.equal(res.body.initUnit, "L");
          assert.equal(res.body.returnNum, 2.64172, 0.1);
          assert.equal(res.body.returnUnit, "gal");
          done();
        });
    });
  });

  suite("GET request for invalid unit input", () => {
    test("32g (Invalid) to return invalid", (done) => {
      chai
        .request(server)
        .get("/api/convert")
        .query({ input: "32g" })
        .end((err, res) => {
          assert.equal(res.status, 200);
          assert.equal(res.body.initUnit, undefined);
          assert.equal(res.text, "invalid unit");
          done();
        });
    });
  });

  suite("GET request for invalid fraction input", () => {
    test("3/7.2/4kg (Invalid) to return invalid", (done) => {
      chai
        .request(server)
        .get("/api/convert")
        .query({ input: "3/7.2/4kg" })
        .end((err, res) => {
          assert.equal(res.status, 200);
          assert.equal(res.body.initUnit, undefined);
          assert.equal(res.text, "invalid number");
          done();
        });
    });
  });

  suite("GET request for invalid fraction and unit", () => {
    test("3/7.2/4kilomegagram (Invalid) to return invalid", (done) => {
      chai
        .request(server)
        .get("/api/convert")
        .query({ input: "3/7.2/4kilomegagram" })
        .end((err, res) => {
          assert.equal(res.status, 200);
          assert.equal(res.body.initUnit, undefined);
          assert.equal(res.text, "invalid number and unit");
          done();
        });
    });
  });

  suite("GET request at /api/convert to convert with no number", () => {
    test("[No number]kg Conversion to Gallons (Valid)", (done) => {
      chai
        .request(server)
        .get("/api/convert")
        .query({ input: "kg" })
        .end((err, res) => {
          assert.equal(res.status, 200);
          assert.equal(res.body.initNum, 1);
          assert.equal(res.body.initUnit, "kg");
          assert.equal(res.body.returnNum, 2.20462, 0.1);
          assert.equal(res.body.returnUnit, "lbs");
          done();
        });
    });
  });
});

I’m thinking its either the environment variable or syntax. Maybe glitch?

-Wes

I believe there is an issue with Glitch and the invalid input tests. As far as I remember, it strips the extra / (or something to that effect).

If you look at the response for…

https://broadleaf-jealous-mine.glitch.me/api/convert?input=1//2gal

…it shows this:

{"initNum":0.5,"initUnit":"gal","returnNum":1.89271,"returnUnit":"L","string":"0.5 gallons converts to 1.89271 liters"}

Thanks! After uploading to render.com (one of my favorite free app hosting platforms) I was able to get all the tests to pass.

For anyone who stumbles across this post in the future:

Don’t waste time with repl.it or glitch.me for this project. They did not work for me.

Use render.com or an alternative app hosting platform that doesn’t strip url query strings.

Thanks again, onto the next…

ALMOST FORGOT:

Make sure to set the environment variables properly.