Coder Social home page Coder Social logo

unit-tests's Introduction

Unit Tests Challenge

This repository contains a bunch of unfinished or buggy functions in the src folder. Your task is to run the tests, find the bugs or finish unfinished functionality. See how far you can get. You don't have to finish them all, but give it a try!

How to run the tests

  1. First, fork this repository, then clone it to your computer. You'll need to install a couple of things before you can start running and fixing the tests.
  2. Before you can run the tests, you need to have Node and NPM installed. If you already have them installed, you can skip this step. You can install node using the installer from nodejs.org, or (mac only) by first installing homebrew and running brew install node.
  3. Now you have node, you can install the dependencies this project needs to run. Make sure you have cd'd into this project, and then run npm install to install all dependencies listed in package.json.
  4. Finally, you're ready to run the tests! Run npm run test to run the full test suite.

Finding and fixing a test

Let's fix the first test together.

The first thing you'll notice when running the entire suite is that you get a lot of output in your terminal. This can be a little overwhelming, so we can make it a little easier on ourselves and run our tests one-at-a-time until we have them all fixed.

So, let's take the first test, which is for this file; src/1-multiplication.js. The tests are defined in src/1-multiplication.spec.js.

We can run this test individually with the following command:

npm run test -- -t 1-multiplication

This matches tests based on the string in the description() function from their test. The output should look something like this:

 FAIL  src/1-multiplication.spec.js
  ● 1-multiplication › should return the value from multiplying two numbers

    expect(received).toEqual(expected) // deep equality

    Expected: 4
    Received: undefined

      3 | describe('1-multiplication', () => {
      4 |   it('should return the value from multiplying two numbers', () => {
    > 5 |     expect(multiply(2, 2)).toEqual(4)
        |                            ^
      6 |   })
      7 | })
      8 |

      at Object.toEqual (src/1-multiplication.spec.js:5:28)


Test Suites: 1 failed, 1 skipped, 1 of 2 total
Tests:       1 failed, 1 skipped, 2 total
Snapshots:   0 total
Time:        1.374s

So, we have 1 failing assertion. If you look at the expected and recieved values, it seems that our multiply() function (from src/1-multiplication.js) is returning undefined instead of a number:

    Expected: 4
    Received: undefined

So let's look at the function and see why that is. The function looks like this:

export const multiply = (a, b) => {
  a * b
}

See what's missing? It's missing the return keyword! Update the function to include return:

export const multiply = (a, b) => {
  return a * b
}

Now, try running the test again (npm run test -- -t 1-multiplication). Our test should now be fixed! The output should now look like this:

 PASS  src/1-multiplication.spec.js

Test Suites: 1 skipped, 1 passed, 1 of 2 total
Tests:       1 skipped, 1 passed, 2 total
Snapshots:   0 total
Time:        1.277s

👏

Next step

Now you know how to fix a test, try going through the failing tests one-by-one and finding a solution which satisfies all the assertions. Some tests have multiple assertions which you'll need to satisfy, and they get tricker the further you go.

Stretch goals

All tests passing? Awesome! Try to write some new functions and write tests for them! Here's a great place to find some tough challenges!

unit-tests's People

Contributors

idlefingers avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.