Merge pull request #62 from cse110-fa22-group29/e2e-testing

Implement End to End Testing Framework
This commit is contained in:
rheabhutada02 2022-11-17 12:01:48 -08:00 committed by GitHub
commit 29b065562e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 62 additions and 6 deletions

View File

@ -23,5 +23,7 @@ jobs:
uses: actions/checkout@v3 uses: actions/checkout@v3
- name: Install dependencies - name: Install dependencies
run: sudo npm install run: sudo npm install
- name: Start local http server
run: sudo npm run http-server
- name: Run tests - name: Run tests
run: sudo npm test run: sudo npm test

View File

@ -7,7 +7,8 @@
"lint": "eslint '**/*.js'", "lint": "eslint '**/*.js'",
"fix-style": "eslint --fix **/*.js", "fix-style": "eslint --fix **/*.js",
"lintHTML": "htmlhint '**/*.html'", "lintHTML": "htmlhint '**/*.html'",
"lintCSS": "stylelint '**/*.css'" "lintCSS": "stylelint '**/*.css'",
"http-server": "http-server source"
}, },
"devDependencies": { "devDependencies": {
"eslint": "^8.27.0", "eslint": "^8.27.0",
@ -15,6 +16,8 @@
"mocha": "10", "mocha": "10",
"mock-local-storage": "^1.1.23", "mock-local-storage": "^1.1.23",
"stylelint": "14.14.1", "stylelint": "14.14.1",
"stylelint-config-standard": "^29.0.0" "stylelint-config-standard": "^29.0.0",
"puppeteer": "18",
"http-server": ""
} }
} }

View File

@ -2,11 +2,12 @@ import {strict as assert} from "node:assert";
import {describe, it, beforeEach} from "mocha"; import {describe, it, beforeEach} from "mocha";
import {saveReviewsToStorage, getReviewsFromStorage} from "./localStorage.js"; import {saveReviewsToStorage, getReviewsFromStorage} from "./localStorage.js";
beforeEach(() => {
localStorage.clear();
});
describe("test app localStorage interaction", () => { describe("test app localStorage interaction", () => {
beforeEach(() => {
localStorage.clear();
});
it("get after init", () => { it("get after init", () => {
assert.deepEqual(getReviewsFromStorage(), []); assert.deepEqual(getReviewsFromStorage(), []);
}); });

View File

@ -0,0 +1,31 @@
import {strict as assert} from "node:assert";
import {describe, it, beforeEach, afterEach} from "mocha";
import puppeteer from "puppeteer-core";
import { exit } from "node:process";
describe("test App end to end", async () => {
let browser;
let page;
beforeEach(async () => {
browser = await puppeteer.launch();
page = await browser.newPage();
try{
await page.goto("http://localhost:8080", {timeout: 1000});
}
catch (error) {
console.log("❌ failed to connect to localhost webserver on port 8080");
exit(1);
}
});
it("page should have correct title", async () => {
assert.strictEqual(await page.title(), "Food Journal");
});
afterEach(async () => {
await page.close();
await browser.close();
});
});

View File

@ -0,0 +1,19 @@
# Use puppeteer for JS unit testing framework
- Status: accept
- Deciders: Arthur Lu, Marc Reta
- Date: 11 / 16 / 22
## Decision Drivers
- Need end to end testing framework which runs headlessly and quickly
- Framework should integrate well with Mocha, the existing unit testing framework
- Framework should be easy to implement end to end tests with
## Considered Options
- puppeteer
- selenium-webdriver
## Decision Outcome
Chosen Option: Puppeteer for its ease of use with mocha.