--- title: Testing Methodologies tags: Templates, Talk description: View the slide with "Slide Mode". --- # Testing Methodologies ## Different testing frameworks * ***Tape*** * ***Jest*** * ***QUnit*** * ***Jasmine*** * ***Mocha*** ## How are they different ***Jasmine (v2.0.1)*** Jasmine is a very popular one,It also has runners in Python and Ruby, which is incredibly useful if you want to run your client-side tests alongside your server-side ones. ***Mocha (v1.20.1)*** Mocha doesn't have an assertion library built in, so it requires an additional 3rd-party library to be added. While I appreciate the flexibility, this adds some unnecessary friction for first-time users, who need to pick one without a lot of context about why one would be a better choice than the other. ***Globals***: Mocha, Jasmine, and several other alternatives pollute the global environment with functions like `describe`, `it`, etc… Some assertion libraries extend built-in prototypes. Aside from removing the self-documenting nature of simple module exports, those decisions could potentially conflict with the code you’re trying to test. Vs: Tape’s simple module export. # Tape *Installation*: npm install tape --save-dev *We should always require Tape in our test files, like this:* var test = require("tape"); *Documentation*: https://github.com/substack/tape --- # t.equal t.equal(actual, expected, msg) **Example (this test will not pass):** test("Testing equal", function(t) { var actual = { a: [2 + 3], b: [4] }; var expected = { a: [5], b: [4] }; t.equal(actual, expected, "Should be equal"); t.end(); }); --- # t.deepEqual t.deepEqual(actual, expected, msg) Example (this test **will** pass): test("Testing deepEqual", function(t) { var actual = { a: [2 + 3], b: [4] }; var expected = { a: [5], b: [4] }; t.deepEqual(actual, expected, "Should be deepEqual"); t.end(); }); **But** this one will **not**: test("Testing deepEqual", function(t) { var actual = { a: [2 + 3], b: [4] }; var expected = { a: ["5"], b: [4] }; t.deepEqual(actual, expected, "Should be deepEqual"); t.end(); }); --- # t.deepLooseEqual t.deepLooseEqual(actual, expected, msg) Example (this **will** pass); test("Testing deepLooseEqual", function(t) { var actual = { a: [2 + 3], b: [4] }; var expected = { a: ["5"], b: [4] }; t.deepLooseEqual(actual, expected, "Should be deepLooseEqual"); t.end(); }); --- # t.ok t.notOk(value, msg) Example (this will **not** pass): test("Testing ok", function(t) { var actual = 2 + 3 == 7; t.ok(actual, "Actual should === true"); t.end(); }); I will see the following error: ✖ Actual should === true ------------------------- operator: ok expected: true actual: false --- # t.plan t.plan(number of times the test will run), instead of **t.end()**. Example: test("Testing ok", function(t) { t.plan(2); var actual = 2 + 5 == 7; var mistake = 2 + 5 === 8; t.ok(actual, "Actual should === true"); t.ok(mistake, "Actual should === true"); });