donal
2018-04-13 efef31ae07968937adee7547f58eb50439dc0b41
ADD some new testing for the actions
1 files added
4 files modified
158 ■■■■■ changed files
package-lock.json 107 ●●●●● patch | view | raw | blame | history
package.json 2 ●●●●● patch | view | raw | blame | history
src/store/actions.js 2 ●●● patch | view | raw | blame | history
src/store/mutations.js 2 ●●● patch | view | raw | blame | history
tests/unit/javascript/actions.spec.js 45 ●●●●● patch | view | raw | blame | history
package-lock.json
@@ -866,6 +866,15 @@
        "glob-to-regexp": "0.3.0"
      }
    },
    "@sinonjs/formatio": {
      "version": "2.0.0",
      "resolved": "http://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz",
      "integrity": "sha512-ls6CAMA6/5gG+O/IdsBcblvnd8qcO/l1TYoNeAzp3wcISOxlPXQEus0mLcdwazEkWjaBdaJ3TaxmNgCLWwvWzg==",
      "dev": true,
      "requires": {
        "samsam": "1.3.0"
      }
    },
    "@types/strip-bom": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz",
@@ -1936,6 +1945,15 @@
      "requires": {
        "follow-redirects": "1.4.1",
        "is-buffer": "1.1.6"
      }
    },
    "axios-mock-adapter": {
      "version": "1.15.0",
      "resolved": "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-1.15.0.tgz",
      "integrity": "sha1-+8BoJdgwLJXDM00hAju6mWJV1F0=",
      "dev": true,
      "requires": {
        "deep-equal": "1.0.1"
      }
    },
    "babel-code-frame": {
@@ -9031,6 +9049,12 @@
        "verror": "1.10.0"
      }
    },
    "just-extend": {
      "version": "1.1.27",
      "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-1.1.27.tgz",
      "integrity": "sha512-mJVp13Ix6gFo3SBAy9U/kL+oeZqzlYYYLQBwXVBlVzIsZwBqGREnOro24oC/8s8aox+rJhtZ2DiQof++IrkA+g==",
      "dev": true
    },
    "kew": {
      "version": "0.7.0",
      "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz",
@@ -9369,6 +9393,12 @@
        }
      }
    },
    "lodash.get": {
      "version": "4.4.2",
      "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
      "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
      "dev": true
    },
    "lodash.isarguments": {
      "version": "3.1.0",
      "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
@@ -9472,6 +9502,12 @@
      "version": "1.6.1",
      "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz",
      "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=",
      "dev": true
    },
    "lolex": {
      "version": "2.3.2",
      "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.3.2.tgz",
      "integrity": "sha512-A5pN2tkFj7H0dGIAM6MFvHKMJcPnjZsOMvR7ujCjfgW5TbV6H9vb1PgxLtHvjqNZTHsUolz+6/WEO0N1xNx2ng==",
      "dev": true
    },
    "longest": {
@@ -10045,6 +10081,36 @@
          "dev": true,
          "requires": {
            "brace-expansion": "1.1.11"
          }
        }
      }
    },
    "nise": {
      "version": "1.3.2",
      "resolved": "https://registry.npmjs.org/nise/-/nise-1.3.2.tgz",
      "integrity": "sha512-KPKb+wvETBiwb4eTwtR/OsA2+iijXP+VnlSFYJo3EHjm2yjek1NWxHOUQat3i7xNLm1Bm18UA5j5Wor0yO2GtA==",
      "dev": true,
      "requires": {
        "@sinonjs/formatio": "2.0.0",
        "just-extend": "1.1.27",
        "lolex": "2.3.2",
        "path-to-regexp": "1.7.0",
        "text-encoding": "0.6.4"
      },
      "dependencies": {
        "isarray": {
          "version": "0.0.1",
          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
          "dev": true
        },
        "path-to-regexp": {
          "version": "1.7.0",
          "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
          "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=",
          "dev": true,
          "requires": {
            "isarray": "0.0.1"
          }
        }
      }
@@ -13973,6 +14039,12 @@
        "ret": "0.1.15"
      }
    },
    "samsam": {
      "version": "1.3.0",
      "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz",
      "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg==",
      "dev": true
    },
    "sane": {
      "version": "2.5.0",
      "resolved": "https://registry.npmjs.org/sane/-/sane-2.5.0.tgz",
@@ -14671,6 +14743,35 @@
      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
      "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
      "dev": true
    },
    "sinon": {
      "version": "4.5.0",
      "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.5.0.tgz",
      "integrity": "sha512-trdx+mB0VBBgoYucy6a9L7/jfQOmvGeaKZT4OOJ+lPAtI8623xyGr8wLiE4eojzBS8G9yXbhx42GHUOVLr4X2w==",
      "dev": true,
      "requires": {
        "@sinonjs/formatio": "2.0.0",
        "diff": "3.5.0",
        "lodash.get": "4.4.2",
        "lolex": "2.3.2",
        "nise": "1.3.2",
        "supports-color": "5.3.0",
        "type-detect": "4.0.8"
      },
      "dependencies": {
        "diff": {
          "version": "3.5.0",
          "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
          "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
          "dev": true
        },
        "type-detect": {
          "version": "4.0.8",
          "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
          "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
          "dev": true
        }
      }
    },
    "slash": {
      "version": "1.0.0",
@@ -15718,6 +15819,12 @@
        }
      }
    },
    "text-encoding": {
      "version": "0.6.4",
      "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz",
      "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=",
      "dev": true
    },
    "text-table": {
      "version": "0.2.0",
      "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
package.json
@@ -36,12 +36,14 @@
    "@vue/cli-service": "^3.0.0-beta.6",
    "@vue/eslint-config-prettier": "^3.0.0-beta.6",
    "@vue/test-utils": "^1.0.0-beta.10",
    "axios-mock-adapter": "^1.15.0",
    "babel-core": "^7.0.0-0",
    "babel-jest": "^22.0.4",
    "chai": "^4.1.2",
    "jest-junit-reporter": "^1.1.0",
    "node-sass": "^4.7.2",
    "sass-loader": "^6.0.6",
    "sinon": "^4.5.0",
    "vue-template-compiler": "^2.5.13"
  },
  "browserslist": [
src/store/actions.js
@@ -20,7 +20,7 @@
];
export default {
  loadTodos({ commit }) {
    axios
    return axios
      .get(config.todoEndpoint)
      .then(r => r.data)
      .then(todos => {
src/store/mutations.js
@@ -28,7 +28,7 @@
    state.todos = [];
  },
  MARK_TODO_COMPLETED(state, index) {
    console.log('INFO - Clearing all todos');
    console.log('INFO - Mark todo as completed');
    state.todos[index].completed = !state.todos[index].completed;
  }
};
tests/unit/javascript/actions.spec.js
New file
@@ -0,0 +1,45 @@
import actions from "@/store/actions";
import store from "@/store";
import * as all from "../setup.js";
import axios from 'axios';
import MockAdapter from 'axios-mock-adapter';
import sinon from "sinon";
const todos = [
  { id: 1, title: "learn testing", completed: true },
  { id: 2, title: "learn testing 2", completed: false }
];
describe("load todos", () => {
  it("should call commit to the mutation function twice", (done) => {
    const commit = sinon.spy();
    let mock = new MockAdapter(axios);
    mock.onGet('http://localhost:9000/api/todos').reply(200, todos);
    actions.loadTodos({ commit }).then(() => {
      // console.log(commit)
      expect(commit.calledTwice).toBe(true);
      done();
    });
  });
  it("should first call SET_LOADING", (done) => {
    const commit = sinon.spy();
    let mock = new MockAdapter(axios);
    mock.onGet('http://localhost:9000/api/todos').reply(200, todos);
    actions.loadTodos({ commit }).then(() => {
      // console.log(commit.firstCall.args[0])
      expect(commit.firstCall.args[0]).toBe("SET_TODOS");
      done();
    });
  });
  it("should second call SET_TODOS", (done) => {
    const commit = sinon.spy();
    let mock = new MockAdapter(axios);
    mock.onGet('http://localhost:9000/api/todos').reply(200, todos);
    actions.loadTodos({ commit }).then(() => {
      // console.log(commit)
      expect(commit.secondCall.args[0]).toBe("SET_LOADING");
      done();
    });
  });
});