From 9a9fe0c5d7475c1b8dd900365a3a50ebfbb9408d Mon Sep 17 00:00:00 2001 From: Arthur Lu Date: Sat, 5 Nov 2022 00:36:55 -0700 Subject: [PATCH 01/14] add template for unittest abstraction layer --- unittest/unittest.js | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 unittest/unittest.js diff --git a/unittest/unittest.js b/unittest/unittest.js new file mode 100644 index 0000000..5b9cc35 --- /dev/null +++ b/unittest/unittest.js @@ -0,0 +1,7 @@ +function environment(name, tests) {} + +function test(name, items) {} + +function item(name, method) {} + +function assert(result, expected) {} \ No newline at end of file From 9e1bd31c364a0ee42d2d5bba44eb8325ed573124 Mon Sep 17 00:00:00 2001 From: Arthur Lu Date: Sat, 5 Nov 2022 17:49:41 -0700 Subject: [PATCH 02/14] add module exports to unittest.js Signed-off-by: Arthur Lu --- unittest/unittest.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/unittest/unittest.js b/unittest/unittest.js index 5b9cc35..c72bea1 100644 --- a/unittest/unittest.js +++ b/unittest/unittest.js @@ -4,4 +4,6 @@ function test(name, items) {} function item(name, method) {} -function assert(result, expected) {} \ No newline at end of file +function assert(result, expected) {} + +module.exports = {environment, test, item, assert}; \ No newline at end of file From d5a36a913ed722c90a9cf294359ecb27c6cd4c4f Mon Sep 17 00:00:00 2001 From: Arthur Lu Date: Sat, 5 Nov 2022 20:19:14 -0700 Subject: [PATCH 03/14] implement unittest.js, implement unittest.test.js Signed-off-by: Arthur Lu --- unittest/unittest.js | 60 +++++++++++++++++++-- unittest/unittest.test.js | 110 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 165 insertions(+), 5 deletions(-) create mode 100644 unittest/unittest.test.js diff --git a/unittest/unittest.js b/unittest/unittest.js index c72bea1..bf894fd 100644 --- a/unittest/unittest.js +++ b/unittest/unittest.js @@ -1,9 +1,59 @@ -function environment(name, tests) {} +module.exports = {test, item, assert}; -function test(name, items) {} +var itemsFailed; -function item(name, method) {} +/* + * Calls multiple item functions. + * + * param name string name of the test + * param items func callable function that contains item calls + * + * return bool whether the test passed or failed +*/ +function test(name, items) { + console.log(name); + items(); +} -function assert(result, expected) {} +/* + * Contain multiple assertions to test specific behavior + * + * param name string name of the specific item + * param items func multple assertion calls + * + * return bool whether the item passed or failed +*/ +function item(name, method) { + try{ + method(); + console.log('\t\x1b[32m%s\x1b[0m', '\u2714 ' + name); + itemsFailed += 0; + return true; + } + catch (error) { + console.log('\t\x1b[31m%s\x1b[0m', '\u2718 ' + name); + itemsFailed += 1; + return false; + } +} -module.exports = {environment, test, item, assert}; \ No newline at end of file +/* + * Given two inputs, comapres if they equivalent. + * + * param input any output of some function to be tested. + * param expected any expected output of the function + * + * return bool whether input = expected +*/ +function assert(input, expected) { + let result; + if (typeof(input) === 'object') { + result = JSON.stringify(input) === JSON.stringify(expected); + } + else { + result = input === expected; + } + if(!result){ + throw new Error(); + } +} \ No newline at end of file diff --git a/unittest/unittest.test.js b/unittest/unittest.test.js new file mode 100644 index 0000000..16c0d4e --- /dev/null +++ b/unittest/unittest.test.js @@ -0,0 +1,110 @@ +const unittest = require("./unittest.js"); + +const localStorageMock = (function () { + let store = {}; + return { + getItem(key) { + return store[key]; + }, + setItem(key, value) { + store[key] = value; + }, + clear() { + store = {}; + }, + removeItem(key) { + delete store[key]; + }, + getAll() { + return store; + }, + }; +})(); +let window = {}; +Object.defineProperty(window, "localStorage", { value: localStorageMock }); + +function assertion_test () { + try { unittest.assert(1, 1); } + catch (error) { console.log("Failed assert(1,1)") } + + try { unittest.assert(65536, 65536); } + catch (error) { console.log("Failed assert(655366,65536)") } + + try { unittest.assert(-50, 50); console.log("Failed assert(-50,50)") } + catch (error) { } + + try { unittest.assert(0, 1); console.log("Failed assert(0,1)") } + catch (error) { } + + try { unittest.assert(true, true); } + catch (error) { console.log("Failed assert(true,true)") } + + try { unittest.assert(false, false); } + catch (error) { console.log("Failed assert(false,false)") } + + try { unittest.assert(true, false); console.log("Failed assert(true,false)") } + catch (error) { } + + try { unittest.assert(false, true); console.log("Failed assert(false,true)") } + catch (error) { } + + try { unittest.assert("Test", "Test"); } + catch (error) { console.log("Failed assert('Test','Test')") } + + try { unittest.assert("Test", "Yay"); console.log("Failed assert('Test','Yay')") } + catch (error) { } + + try { unittest.assert({one: 1, two: 2}, {one: 1, two: 2}); } + catch (error) { console.log("Failed assert({one: 1, two: 2},{one: 1, two: 2})") } + + try { unittest.assert({one: 1, two: 2}, {two: 2, three: 3}); console.log("Failed assert({one: 1, two: 2}, {two: 2, three: 3})") } + catch (error) { } +} +assertion_test(); + +function item_test () { + unittest.item("passing item", () => { + unittest.assert(1, 1); + }); + unittest.item("failing item", () => { + unittest.assert(1, 2); + }); +} +item_test(); + +function test_test () { + unittest.test("example test", () => { + unittest.item("assert 1 = 1", () => { + unittest.assert(1, 1); + }); + unittest.item("assert 1 = 2", () => { + unittest.assert(1, 2); + }) + }); +} +test_test(); + +function environment_test () { + function testfunc1 () { + window.localStorage.clear(); + window.localStorage.setItem("testkey", "testvalue"); + return window.localStorage.getItem("testkey"); + } + + function testfunc2 (){ + window.localStorage.removeItem("testkey"); + } + + unittest.test("test add item", () => { + unittest.item("testfunc1", () => { + unittest.assert(testfunc1(), "testvalue"); + }); + }); + + unittest.test("test delete item", () => { + unittest.item("testfunc2", () => { + unittest.assert(testfunc2(), undefined); + }); + }); +} +environment_test(); \ No newline at end of file From ec305e667da5219efa8bc961c2f6ee5df2656cca Mon Sep 17 00:00:00 2001 From: Arthur Lu Date: Sun, 6 Nov 2022 05:46:23 +0000 Subject: [PATCH 04/14] switch unit test framework to jest, remove framework unittest, add helper module to create unit testing environment --- .gitignore | 3 ++ testenv/package.json | 10 ++++ testenv/testenv.js | 28 ++++++++++ testenv/testenv.test.js | 86 +++++++++++++++++++++++++++++ unittest/unittest.js | 59 -------------------- unittest/unittest.test.js | 110 -------------------------------------- 6 files changed, 127 insertions(+), 169 deletions(-) create mode 100644 .gitignore create mode 100644 testenv/package.json create mode 100644 testenv/testenv.js create mode 100644 testenv/testenv.test.js delete mode 100644 unittest/unittest.js delete mode 100644 unittest/unittest.test.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4f2c69d --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +**/.devcontainer/* +**/node_modules/* +**/package-lock.json \ No newline at end of file diff --git a/testenv/package.json b/testenv/package.json new file mode 100644 index 0000000..0aedc61 --- /dev/null +++ b/testenv/package.json @@ -0,0 +1,10 @@ +{ + "name": "testenv", + "version": "1.0.0", + "scripts": { + "test": "jest" + }, + "dependencies": { + "jest": "24" + } +} diff --git a/testenv/testenv.js b/testenv/testenv.js new file mode 100644 index 0000000..e62cfc3 --- /dev/null +++ b/testenv/testenv.js @@ -0,0 +1,28 @@ +module.exports = {environment}; + +function environment () { + const localStorageMock = (function () { + let store = {}; + return { + getItem(key) { + return store[key]; + }, + setItem(key, value) { + store[key] = value; + }, + clear() { + store = {}; + }, + removeItem(key) { + delete store[key]; + }, + getAll() { + return store; + }, + }; + })(); + + let window = {}; + Object.defineProperty(window, "localStorage", { value: localStorageMock }); + return window; +} \ No newline at end of file diff --git a/testenv/testenv.test.js b/testenv/testenv.test.js new file mode 100644 index 0000000..27c8981 --- /dev/null +++ b/testenv/testenv.test.js @@ -0,0 +1,86 @@ +const {environment} = require("./testenv.js"); + +function saveToLocal (k, v) { + window.localStorage.setItem(k, v); +} + +function getFromLocal (k) { + return window.localStorage.getItem(k); +} + +function removeFromLocal (k) { + window.localStorage.removeItem(k); +} + +function clearLocal () { + window.localStorage.clear(); +} + +describe("test localStorage mock", () => { + test("test save and fetch", () => { + let window = environment(); + saveToLocal("testkey1", "testvalue1"); + saveToLocal("testkey2", "testvalue2"); + saveToLocal("testkey3", "testvalue3"); + saveToLocal("testkey4", "testvalue4"); + + expect(getFromLocal("testkey1")).toBe("testvalue1"); + expect(getFromLocal("testkey2")).toBe("testvalue2"); + expect(getFromLocal("testkey3")).toBe("testvalue3"); + expect(getFromLocal("testkey4")).toBe("testvalue4"); + + saveToLocal("testkey6", "testvalue5"); + expect(getFromLocal("testkey6")).toBe("testvalue5"); + }); + + test("test delete and fetch", () => { + let window = environment(); + saveToLocal("testkey1", "testvalue1"); + saveToLocal("testkey2", "testvalue2"); + saveToLocal("testkey3", "testvalue3"); + saveToLocal("testkey4", "testvalue4"); + + removeFromLocal("testkey3"); + + expect(getFromLocal("testkey1")).toBe("testvalue1"); + expect(getFromLocal("testkey2")).toBe("testvalue2"); + expect(getFromLocal("testkey3")).toBe(null); + expect(getFromLocal("testkey4")).toBe("testvalue4"); + + removeFromLocal("testkey1"); + + expect(getFromLocal("testkey1")).toBe(null); + expect(getFromLocal("testkey2")).toBe("testvalue2"); + expect(getFromLocal("testkey3")).toBe(null); + expect(getFromLocal("testkey4")).toBe("testvalue4"); + + removeFromLocal("testkey4"); + + expect(getFromLocal("testkey1")).toBe(null); + expect(getFromLocal("testkey2")).toBe("testvalue2"); + expect(getFromLocal("testkey3")).toBe(null); + expect(getFromLocal("testkey4")).toBe(null); + + removeFromLocal("testkey2"); + + expect(getFromLocal("testkey1")).toBe(null); + expect(getFromLocal("testkey2")).toBe(null); + expect(getFromLocal("testkey3")).toBe(null); + expect(getFromLocal("testkey4")).toBe(null); + }); + + test("test delete and fetch", () => { + let window = environment(); + saveToLocal("testkey1", "testvalue1"); + saveToLocal("testkey2", "testvalue2"); + saveToLocal("testkey3", "testvalue3"); + saveToLocal("testkey4", "testvalue4"); + + clearLocal(); + + expect(getFromLocal("testkey1")).toBe(null); + expect(getFromLocal("testkey2")).toBe(null); + expect(getFromLocal("testkey3")).toBe(null); + expect(getFromLocal("testkey4")).toBe(null); + }); +}); \ No newline at end of file diff --git a/unittest/unittest.js b/unittest/unittest.js deleted file mode 100644 index bf894fd..0000000 --- a/unittest/unittest.js +++ /dev/null @@ -1,59 +0,0 @@ -module.exports = {test, item, assert}; - -var itemsFailed; - -/* - * Calls multiple item functions. - * - * param name string name of the test - * param items func callable function that contains item calls - * - * return bool whether the test passed or failed -*/ -function test(name, items) { - console.log(name); - items(); -} - -/* - * Contain multiple assertions to test specific behavior - * - * param name string name of the specific item - * param items func multple assertion calls - * - * return bool whether the item passed or failed -*/ -function item(name, method) { - try{ - method(); - console.log('\t\x1b[32m%s\x1b[0m', '\u2714 ' + name); - itemsFailed += 0; - return true; - } - catch (error) { - console.log('\t\x1b[31m%s\x1b[0m', '\u2718 ' + name); - itemsFailed += 1; - return false; - } -} - -/* - * Given two inputs, comapres if they equivalent. - * - * param input any output of some function to be tested. - * param expected any expected output of the function - * - * return bool whether input = expected -*/ -function assert(input, expected) { - let result; - if (typeof(input) === 'object') { - result = JSON.stringify(input) === JSON.stringify(expected); - } - else { - result = input === expected; - } - if(!result){ - throw new Error(); - } -} \ No newline at end of file diff --git a/unittest/unittest.test.js b/unittest/unittest.test.js deleted file mode 100644 index 16c0d4e..0000000 --- a/unittest/unittest.test.js +++ /dev/null @@ -1,110 +0,0 @@ -const unittest = require("./unittest.js"); - -const localStorageMock = (function () { - let store = {}; - return { - getItem(key) { - return store[key]; - }, - setItem(key, value) { - store[key] = value; - }, - clear() { - store = {}; - }, - removeItem(key) { - delete store[key]; - }, - getAll() { - return store; - }, - }; -})(); -let window = {}; -Object.defineProperty(window, "localStorage", { value: localStorageMock }); - -function assertion_test () { - try { unittest.assert(1, 1); } - catch (error) { console.log("Failed assert(1,1)") } - - try { unittest.assert(65536, 65536); } - catch (error) { console.log("Failed assert(655366,65536)") } - - try { unittest.assert(-50, 50); console.log("Failed assert(-50,50)") } - catch (error) { } - - try { unittest.assert(0, 1); console.log("Failed assert(0,1)") } - catch (error) { } - - try { unittest.assert(true, true); } - catch (error) { console.log("Failed assert(true,true)") } - - try { unittest.assert(false, false); } - catch (error) { console.log("Failed assert(false,false)") } - - try { unittest.assert(true, false); console.log("Failed assert(true,false)") } - catch (error) { } - - try { unittest.assert(false, true); console.log("Failed assert(false,true)") } - catch (error) { } - - try { unittest.assert("Test", "Test"); } - catch (error) { console.log("Failed assert('Test','Test')") } - - try { unittest.assert("Test", "Yay"); console.log("Failed assert('Test','Yay')") } - catch (error) { } - - try { unittest.assert({one: 1, two: 2}, {one: 1, two: 2}); } - catch (error) { console.log("Failed assert({one: 1, two: 2},{one: 1, two: 2})") } - - try { unittest.assert({one: 1, two: 2}, {two: 2, three: 3}); console.log("Failed assert({one: 1, two: 2}, {two: 2, three: 3})") } - catch (error) { } -} -assertion_test(); - -function item_test () { - unittest.item("passing item", () => { - unittest.assert(1, 1); - }); - unittest.item("failing item", () => { - unittest.assert(1, 2); - }); -} -item_test(); - -function test_test () { - unittest.test("example test", () => { - unittest.item("assert 1 = 1", () => { - unittest.assert(1, 1); - }); - unittest.item("assert 1 = 2", () => { - unittest.assert(1, 2); - }) - }); -} -test_test(); - -function environment_test () { - function testfunc1 () { - window.localStorage.clear(); - window.localStorage.setItem("testkey", "testvalue"); - return window.localStorage.getItem("testkey"); - } - - function testfunc2 (){ - window.localStorage.removeItem("testkey"); - } - - unittest.test("test add item", () => { - unittest.item("testfunc1", () => { - unittest.assert(testfunc1(), "testvalue"); - }); - }); - - unittest.test("test delete item", () => { - unittest.item("testfunc2", () => { - unittest.assert(testfunc2(), undefined); - }); - }); -} -environment_test(); \ No newline at end of file From 2d4f8e48c22ae9a50f48b24aa1768fa9b6c1157a Mon Sep 17 00:00:00 2001 From: Arthur Lu Date: Sun, 6 Nov 2022 22:39:30 +0000 Subject: [PATCH 05/14] move package.json to root dir --- testenv/package.json => package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename testenv/package.json => package.json (80%) diff --git a/testenv/package.json b/package.json similarity index 80% rename from testenv/package.json rename to package.json index 0aedc61..3b7c142 100644 --- a/testenv/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "testenv", + "name": "food-journal", "version": "1.0.0", "scripts": { "test": "jest" From f5b2953c331a42e30da66fd9437f7512ced0fe24 Mon Sep 17 00:00:00 2001 From: Arthur Lu Date: Sun, 6 Nov 2022 22:53:14 +0000 Subject: [PATCH 06/14] fix testenv unit test naming --- testenv/testenv.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testenv/testenv.test.js b/testenv/testenv.test.js index 27c8981..9f585cc 100644 --- a/testenv/testenv.test.js +++ b/testenv/testenv.test.js @@ -69,7 +69,7 @@ describe("test localStorage mock", () => { expect(getFromLocal("testkey4")).toBe(null); }); - test("test delete and fetch", () => { + test("test clear and fetch", () => { let window = environment(); saveToLocal("testkey1", "testvalue1"); saveToLocal("testkey2", "testvalue2"); From c95834ca31fb74dfa405a7f5fbc5e46a196a3db6 Mon Sep 17 00:00:00 2001 From: Arthur Lu Date: Sun, 6 Nov 2022 22:57:42 +0000 Subject: [PATCH 07/14] add .gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4f2c69d --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +**/.devcontainer/* +**/node_modules/* +**/package-lock.json \ No newline at end of file From b680b83dcc8cdee1902df5874531bd313494059f Mon Sep 17 00:00:00 2001 From: Arthur Lu Date: Mon, 7 Nov 2022 21:17:05 +0000 Subject: [PATCH 08/14] switch toBe to toStrictEqual in testenv.test.js --- testenv/testenv.test.js | 50 ++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/testenv/testenv.test.js b/testenv/testenv.test.js index 9f585cc..c670de0 100644 --- a/testenv/testenv.test.js +++ b/testenv/testenv.test.js @@ -24,13 +24,13 @@ describe("test localStorage mock", () => { saveToLocal("testkey3", "testvalue3"); saveToLocal("testkey4", "testvalue4"); - expect(getFromLocal("testkey1")).toBe("testvalue1"); - expect(getFromLocal("testkey2")).toBe("testvalue2"); - expect(getFromLocal("testkey3")).toBe("testvalue3"); - expect(getFromLocal("testkey4")).toBe("testvalue4"); + expect(getFromLocal("testkey1")).toStrictEqual("testvalue1"); + expect(getFromLocal("testkey2")).toStrictEqual("testvalue2"); + expect(getFromLocal("testkey3")).toStrictEqual("testvalue3"); + expect(getFromLocal("testkey4")).toStrictEqual("testvalue4"); saveToLocal("testkey6", "testvalue5"); - expect(getFromLocal("testkey6")).toBe("testvalue5"); + expect(getFromLocal("testkey6")).toStrictEqual("testvalue5"); }); test("test delete and fetch", () => { @@ -42,31 +42,31 @@ describe("test localStorage mock", () => { removeFromLocal("testkey3"); - expect(getFromLocal("testkey1")).toBe("testvalue1"); - expect(getFromLocal("testkey2")).toBe("testvalue2"); - expect(getFromLocal("testkey3")).toBe(null); - expect(getFromLocal("testkey4")).toBe("testvalue4"); + expect(getFromLocal("testkey1")).toStrictEqual("testvalue1"); + expect(getFromLocal("testkey2")).toStrictEqual("testvalue2"); + expect(getFromLocal("testkey3")).toStrictEqual(null); + expect(getFromLocal("testkey4")).toStrictEqual("testvalue4"); removeFromLocal("testkey1"); - expect(getFromLocal("testkey1")).toBe(null); - expect(getFromLocal("testkey2")).toBe("testvalue2"); - expect(getFromLocal("testkey3")).toBe(null); - expect(getFromLocal("testkey4")).toBe("testvalue4"); + expect(getFromLocal("testkey1")).toStrictEqual(null); + expect(getFromLocal("testkey2")).toStrictEqual("testvalue2"); + expect(getFromLocal("testkey3")).toStrictEqual(null); + expect(getFromLocal("testkey4")).toStrictEqual("testvalue4"); removeFromLocal("testkey4"); - expect(getFromLocal("testkey1")).toBe(null); - expect(getFromLocal("testkey2")).toBe("testvalue2"); - expect(getFromLocal("testkey3")).toBe(null); - expect(getFromLocal("testkey4")).toBe(null); + expect(getFromLocal("testkey1")).toStrictEqual(null); + expect(getFromLocal("testkey2")).toStrictEqual("testvalue2"); + expect(getFromLocal("testkey3")).toStrictEqual(null); + expect(getFromLocal("testkey4")).toStrictEqual(null); removeFromLocal("testkey2"); - expect(getFromLocal("testkey1")).toBe(null); - expect(getFromLocal("testkey2")).toBe(null); - expect(getFromLocal("testkey3")).toBe(null); - expect(getFromLocal("testkey4")).toBe(null); + expect(getFromLocal("testkey1")).toStrictEqual(null); + expect(getFromLocal("testkey2")).toStrictEqual(null); + expect(getFromLocal("testkey3")).toStrictEqual(null); + expect(getFromLocal("testkey4")).toStrictEqual(null); }); test("test clear and fetch", () => { @@ -78,9 +78,9 @@ describe("test localStorage mock", () => { clearLocal(); - expect(getFromLocal("testkey1")).toBe(null); - expect(getFromLocal("testkey2")).toBe(null); - expect(getFromLocal("testkey3")).toBe(null); - expect(getFromLocal("testkey4")).toBe(null); + expect(getFromLocal("testkey1")).toStrictEqual(null); + expect(getFromLocal("testkey2")).toStrictEqual(null); + expect(getFromLocal("testkey3")).toStrictEqual(null); + expect(getFromLocal("testkey4")).toStrictEqual(null); }); }); \ No newline at end of file From 1798ad1140b82d09d701ac7b9a276a1c00da729b Mon Sep 17 00:00:00 2001 From: Arthur Lu Date: Mon, 7 Nov 2022 23:31:13 +0000 Subject: [PATCH 09/14] implement js unittest action Signed-off-by: Arthur Lu --- .github/workflows/js-unittest.yml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 .github/workflows/js-unittest.yml diff --git a/.github/workflows/js-unittest.yml b/.github/workflows/js-unittest.yml new file mode 100644 index 0000000..4833348 --- /dev/null +++ b/.github/workflows/js-unittest.yml @@ -0,0 +1,25 @@ +name: Install jest and run JS unit tests + +on: + pull_request: + branches: + - main + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +jobs: + # Single deploy job since we're just deploying + test: + runs-on: ubuntu-latest + steps: + - name: Install apt updates + run: apt -y update; apt -y upgrade; + - name: Install prerequisites + run: apt install -y nodejs npm git; + - name: Checkout + uses: actions/checkout@v3 + - name: Install dependencies + run: npm install + - name: Run tests + run: npm test \ No newline at end of file From 6f915678b5dacc03b56c70a65c4cbb44eb641c10 Mon Sep 17 00:00:00 2001 From: Arthur Lu Date: Mon, 7 Nov 2022 23:38:53 +0000 Subject: [PATCH 10/14] sudo all run commands Signed-off-by: Arthur Lu --- .github/workflows/js-unittest.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/js-unittest.yml b/.github/workflows/js-unittest.yml index 4833348..9f68ea5 100644 --- a/.github/workflows/js-unittest.yml +++ b/.github/workflows/js-unittest.yml @@ -14,12 +14,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Install apt updates - run: apt -y update; apt -y upgrade; + run: sudo apt -y update; sudo apt -y upgrade; - name: Install prerequisites - run: apt install -y nodejs npm git; + run: sudo apt install -y nodejs npm git; - name: Checkout uses: actions/checkout@v3 - name: Install dependencies - run: npm install + run: sudo npm install - name: Run tests - run: npm test \ No newline at end of file + run: sudo npm test \ No newline at end of file From c7c395c832006e6cf28fa0cefefb47f0ba798bd7 Mon Sep 17 00:00:00 2001 From: Arthur Lu Date: Mon, 7 Nov 2022 23:43:40 +0000 Subject: [PATCH 11/14] make workflow naming shorter Signed-off-by: Arthur Lu --- .github/workflows/deploy-githubpages.yml | 2 +- .github/workflows/js-unittest.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-githubpages.yml b/.github/workflows/deploy-githubpages.yml index 9189aff..83b8b93 100644 --- a/.github/workflows/deploy-githubpages.yml +++ b/.github/workflows/deploy-githubpages.yml @@ -1,5 +1,5 @@ # Simple workflow for deploying static content to GitHub Pages -name: Deploy static content to Pages +name: Deploy GitHub Pages on: # Runs on pushes targeting the default branch diff --git a/.github/workflows/js-unittest.yml b/.github/workflows/js-unittest.yml index 9f68ea5..f77ba06 100644 --- a/.github/workflows/js-unittest.yml +++ b/.github/workflows/js-unittest.yml @@ -1,4 +1,4 @@ -name: Install jest and run JS unit tests +name: Jest JS Unit Test on: pull_request: From 0f622d16de359a59b580f1b769005834546293a6 Mon Sep 17 00:00:00 2001 From: Arthur Lu Date: Tue, 8 Nov 2022 00:00:15 +0000 Subject: [PATCH 12/14] switch to mocha for test latency improvements Signed-off-by: Arthur Lu --- package.json | 4 +-- testenv/testenv.test.js | 76 ++++++++++++++++++++++++----------------- 2 files changed, 47 insertions(+), 33 deletions(-) diff --git a/package.json b/package.json index 3b7c142..c845db1 100644 --- a/package.json +++ b/package.json @@ -2,9 +2,9 @@ "name": "food-journal", "version": "1.0.0", "scripts": { - "test": "jest" + "test": "mocha --recursive **/*.test.js" }, "dependencies": { - "jest": "24" + "mocha": "10" } } diff --git a/testenv/testenv.test.js b/testenv/testenv.test.js index c670de0..afa68bc 100644 --- a/testenv/testenv.test.js +++ b/testenv/testenv.test.js @@ -1,4 +1,6 @@ const {environment} = require("./testenv.js"); +var assert = require('assert'); +var window; function saveToLocal (k, v) { window.localStorage.setItem(k, v); @@ -17,24 +19,35 @@ function clearLocal () { } describe("test localStorage mock", () => { - test("test save and fetch", () => { - let window = environment(); + it("test save and fetch", () => { + window = environment(); + saveToLocal("testkey1", "testvalue1"); saveToLocal("testkey2", "testvalue2"); saveToLocal("testkey3", "testvalue3"); saveToLocal("testkey4", "testvalue4"); - expect(getFromLocal("testkey1")).toStrictEqual("testvalue1"); - expect(getFromLocal("testkey2")).toStrictEqual("testvalue2"); - expect(getFromLocal("testkey3")).toStrictEqual("testvalue3"); - expect(getFromLocal("testkey4")).toStrictEqual("testvalue4"); + assert.equal(getFromLocal("testkey1"), "testvalue1"); + assert.equal(getFromLocal("testkey2"), "testvalue2"); + assert.equal(getFromLocal("testkey3"), "testvalue3"); + assert.equal(getFromLocal("testkey4"), "testvalue4"); saveToLocal("testkey6", "testvalue5"); - expect(getFromLocal("testkey6")).toStrictEqual("testvalue5"); + assert.equal(getFromLocal("testkey6"), "testvalue5"); }); - test("test delete and fetch", () => { - let window = environment(); + it("test window locality", () => { + window = environment(); + + assert.equal(getFromLocal("testkey1"), null); + assert.equal(getFromLocal("testkey2"), null); + assert.equal(getFromLocal("testkey3"), null); + assert.equal(getFromLocal("testkey4"), null); + }); + + it("test delete and fetch", () => { + window = environment(); + saveToLocal("testkey1", "testvalue1"); saveToLocal("testkey2", "testvalue2"); saveToLocal("testkey3", "testvalue3"); @@ -42,35 +55,36 @@ describe("test localStorage mock", () => { removeFromLocal("testkey3"); - expect(getFromLocal("testkey1")).toStrictEqual("testvalue1"); - expect(getFromLocal("testkey2")).toStrictEqual("testvalue2"); - expect(getFromLocal("testkey3")).toStrictEqual(null); - expect(getFromLocal("testkey4")).toStrictEqual("testvalue4"); + assert.equal(getFromLocal("testkey1"), "testvalue1"); + assert.equal(getFromLocal("testkey2"), "testvalue2"); + assert.equal(getFromLocal("testkey3"), null); + assert.equal(getFromLocal("testkey4"), "testvalue4"); removeFromLocal("testkey1"); - expect(getFromLocal("testkey1")).toStrictEqual(null); - expect(getFromLocal("testkey2")).toStrictEqual("testvalue2"); - expect(getFromLocal("testkey3")).toStrictEqual(null); - expect(getFromLocal("testkey4")).toStrictEqual("testvalue4"); + assert.equal(getFromLocal("testkey1"), null); + assert.equal(getFromLocal("testkey2"), "testvalue2"); + assert.equal(getFromLocal("testkey3"), null); + assert.equal(getFromLocal("testkey4"), "testvalue4"); removeFromLocal("testkey4"); - expect(getFromLocal("testkey1")).toStrictEqual(null); - expect(getFromLocal("testkey2")).toStrictEqual("testvalue2"); - expect(getFromLocal("testkey3")).toStrictEqual(null); - expect(getFromLocal("testkey4")).toStrictEqual(null); + assert.equal(getFromLocal("testkey1"), null); + assert.equal(getFromLocal("testkey2"), "testvalue2"); + assert.equal(getFromLocal("testkey3"), null); + assert.equal(getFromLocal("testkey4"), null); removeFromLocal("testkey2"); - expect(getFromLocal("testkey1")).toStrictEqual(null); - expect(getFromLocal("testkey2")).toStrictEqual(null); - expect(getFromLocal("testkey3")).toStrictEqual(null); - expect(getFromLocal("testkey4")).toStrictEqual(null); + assert.equal(getFromLocal("testkey1"), null); + assert.equal(getFromLocal("testkey2"), null); + assert.equal(getFromLocal("testkey3"), null); + assert.equal(getFromLocal("testkey4"), null); }); - test("test clear and fetch", () => { - let window = environment(); + it("test clear and fetch", () => { + window = environment(); + saveToLocal("testkey1", "testvalue1"); saveToLocal("testkey2", "testvalue2"); saveToLocal("testkey3", "testvalue3"); @@ -78,9 +92,9 @@ describe("test localStorage mock", () => { clearLocal(); - expect(getFromLocal("testkey1")).toStrictEqual(null); - expect(getFromLocal("testkey2")).toStrictEqual(null); - expect(getFromLocal("testkey3")).toStrictEqual(null); - expect(getFromLocal("testkey4")).toStrictEqual(null); + assert.equal(getFromLocal("testkey1"), null); + assert.equal(getFromLocal("testkey2"), null); + assert.equal(getFromLocal("testkey3"), null); + assert.equal(getFromLocal("testkey4"), null); }); }); \ No newline at end of file From 3043c6e157cb4151003f81a36ed16656b87e9bee Mon Sep 17 00:00:00 2001 From: Arthur Lu Date: Tue, 8 Nov 2022 01:33:35 +0000 Subject: [PATCH 13/14] fix locality issue in mocha unit tests, move sample helper functions for localStorage unit testing Signed-off-by: Arthur Lu --- testenv/testenv.test.js | 28 ++++------------------------ testenv/testenv_helpers.js | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 24 deletions(-) create mode 100644 testenv/testenv_helpers.js diff --git a/testenv/testenv.test.js b/testenv/testenv.test.js index afa68bc..d274fb8 100644 --- a/testenv/testenv.test.js +++ b/testenv/testenv.test.js @@ -1,27 +1,13 @@ const {environment} = require("./testenv.js"); var assert = require('assert'); -var window; +var {saveToLocal, getFromLocal, removeFromLocal, clearLocal} = require('./testenv_helpers'); -function saveToLocal (k, v) { - window.localStorage.setItem(k, v); -} - -function getFromLocal (k) { - return window.localStorage.getItem(k); -} - -function removeFromLocal (k) { - window.localStorage.removeItem(k); -} - -function clearLocal () { - window.localStorage.clear(); -} +beforeEach(() => { + window = environment(); +}); describe("test localStorage mock", () => { it("test save and fetch", () => { - window = environment(); - saveToLocal("testkey1", "testvalue1"); saveToLocal("testkey2", "testvalue2"); saveToLocal("testkey3", "testvalue3"); @@ -37,8 +23,6 @@ describe("test localStorage mock", () => { }); it("test window locality", () => { - window = environment(); - assert.equal(getFromLocal("testkey1"), null); assert.equal(getFromLocal("testkey2"), null); assert.equal(getFromLocal("testkey3"), null); @@ -46,8 +30,6 @@ describe("test localStorage mock", () => { }); it("test delete and fetch", () => { - window = environment(); - saveToLocal("testkey1", "testvalue1"); saveToLocal("testkey2", "testvalue2"); saveToLocal("testkey3", "testvalue3"); @@ -83,8 +65,6 @@ describe("test localStorage mock", () => { }); it("test clear and fetch", () => { - window = environment(); - saveToLocal("testkey1", "testvalue1"); saveToLocal("testkey2", "testvalue2"); saveToLocal("testkey3", "testvalue3"); diff --git a/testenv/testenv_helpers.js b/testenv/testenv_helpers.js new file mode 100644 index 0000000..469adc5 --- /dev/null +++ b/testenv/testenv_helpers.js @@ -0,0 +1,17 @@ +module.exports = {saveToLocal, getFromLocal, removeFromLocal, clearLocal}; + +function saveToLocal (k, v) { + window.localStorage.setItem(k, v); +} + +function getFromLocal (k) { + return window.localStorage.getItem(k); +} + +function removeFromLocal (k) { + window.localStorage.removeItem(k); +} + +function clearLocal () { + window.localStorage.clear(); +} \ No newline at end of file From 22a3e9f4f4b11327fd88e7d6d06f477871de48b1 Mon Sep 17 00:00:00 2001 From: Arthur Lu Date: Tue, 8 Nov 2022 02:03:50 +0000 Subject: [PATCH 14/14] remove git from js unit test ci action Signed-off-by: Arthur Lu --- .github/workflows/js-unittest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/js-unittest.yml b/.github/workflows/js-unittest.yml index f77ba06..327f27f 100644 --- a/.github/workflows/js-unittest.yml +++ b/.github/workflows/js-unittest.yml @@ -16,7 +16,7 @@ jobs: - name: Install apt updates run: sudo apt -y update; sudo apt -y upgrade; - name: Install prerequisites - run: sudo apt install -y nodejs npm git; + run: sudo apt install -y nodejs npm; - name: Checkout uses: actions/checkout@v3 - name: Install dependencies