From ff8851030e720b05377cbacbec44c298669cd04f Mon Sep 17 00:00:00 2001 From: Andrei Dumitrescu <5057797+andreidmt@users.noreply.github.com> Date: Wed, 24 Feb 2021 15:31:57 +0100 Subject: [PATCH] feat: Add basic TestCafe suite --- test.app/src/index.html | 25 ++++++++++++++++++++ test.app/src/index.js | 20 ++++++++++++++++ test.app/webpack.config.js | 47 ++++++++++++++++++++++++++++++++++++++ test.scenarios/GET.test.js | 6 +++++ test.scenarios/index.js | 32 ++++++++++++++++++++++++++ 5 files changed, 130 insertions(+) create mode 100644 test.app/src/index.html create mode 100644 test.app/src/index.js create mode 100644 test.app/webpack.config.js create mode 100644 test.scenarios/GET.test.js create mode 100644 test.scenarios/index.js diff --git a/test.app/src/index.html b/test.app/src/index.html new file mode 100644 index 0000000..6042997 --- /dev/null +++ b/test.app/src/index.html @@ -0,0 +1,25 @@ + + + + + + +
+
+ 1. Obtain IP address using GET: https://api.ipify.org +
+
-
+
+ + diff --git a/test.app/src/index.js b/test.app/src/index.js new file mode 100644 index 0000000..7c5bd76 --- /dev/null +++ b/test.app/src/index.js @@ -0,0 +1,20 @@ +const qs = require("qs") +const { GET, setup } = require("../../src") + +setup({ + stringifyQueryParams: source => qs.stringify(source), +}) + +GET("https://api.ipify.org", { + query: { + format: "json", + }, +}) + .then(data => { + document.querySelector("#get-result").innerHTML = `OK ${ + data.ip.split(".").length + }` + }) + .catch(error => { + document.querySelector("#get").innerHTML = error.message + }) diff --git a/test.app/webpack.config.js b/test.app/webpack.config.js new file mode 100644 index 0000000..83dcab6 --- /dev/null +++ b/test.app/webpack.config.js @@ -0,0 +1,47 @@ +/* eslint-env node */ + +const path = require("path") +const HtmlWebPackPlugin = require("html-webpack-plugin") + +module.exports = { + entry: "./test.app/src/index.js", + + output: { + publicPath: "/", + path: path.resolve(__dirname, "dist"), + filename: "[name].js", + }, + + devtool: false, + + module: { + rules: [ + { + test: /.js$/, + exclude: /node_modules/, + use: { + loader: "babel-loader", + }, + }, + ], + }, + + plugins: [ + new HtmlWebPackPlugin({ + template: "test.app/src/index.html", + }), + ], + + optimization: { + runtimeChunk: "single", + splitChunks: { + cacheGroups: { + vendor: { + test: /[/\\]node_modules[/\\]/, + name: "vendors", + chunks: "all", + }, + }, + }, + }, +} diff --git a/test.scenarios/GET.test.js b/test.scenarios/GET.test.js new file mode 100644 index 0000000..ff5daf7 --- /dev/null +++ b/test.scenarios/GET.test.js @@ -0,0 +1,6 @@ +import { Selector as $ } from "testcafe" + +fixture(`asd14/fetch-browser`).page(`http://localhost:50123`) + +test("GET: 200 with json response", t => + t.expect($("#get-result").textContent).eql("OK 4")) diff --git a/test.scenarios/index.js b/test.scenarios/index.js new file mode 100644 index 0000000..0da6e57 --- /dev/null +++ b/test.scenarios/index.js @@ -0,0 +1,32 @@ +/* eslint-disable promise/catch-or-return */ + +/** + * Local static server serving index.html running the compiled version + * of `@asd14/fetch-browser` + */ +const httpServer = require("http-server").createServer({ + root: "test.app/dist", + headers: { + "Access-Control-Allow-Origin": "*", + "Access-Control-Allow-Credentials": "true", + }, +}) + +httpServer.listen(50123) + +/** + * Run all tests via local test runner + */ +const createTestCafe = require("testcafe") + +createTestCafe("localhost", 1337, 1338).then(async testcafe => { + const runner = testcafe.createRunner() + + await runner + .src(["test.scenarios/GET.test.js"]) + .browsers(["firefox:/usr/bin/firefox-developer-edition"]) + .run() + + testcafe.close() + httpServer.close() +})