summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAlan Pearce2017-06-30 18:01:51 +0200
committerAlan Pearce2017-06-30 18:01:51 +0200
commit31f441ff32ab9f52fc80d0835bdd074554587ef6 (patch)
tree2414dc886efcb783352c1857dc6a4a2fd60ce41e
parent562b0533300ad5ad8cf4695aa7fc2b844b918169 (diff)
downloadhomestead-31f441ff32ab9f52fc80d0835bdd074554587ef6.tar.lz
homestead-31f441ff32ab9f52fc80d0835bdd074554587ef6.tar.zst
homestead-31f441ff32ab9f52fc80d0835bdd074554587ef6.zip
test: Use cheerio for DOM testing
-rw-r--r--package.json1
-rw-r--r--test/app.test.js29
-rw-r--r--test/testsite/posts/testfile.md4
-rw-r--r--yarn.lock57
4 files changed, 81 insertions, 10 deletions
diff --git a/package.json b/package.json
index e64409a..9fe5283 100644
--- a/package.json
+++ b/package.json
@@ -22,6 +22,7 @@
   "devDependencies": {
     "auto-install": "^1.7.4",
     "ava": "^0.19.1",
+    "cheerio": "^1.0.0-rc.1",
     "eslint": "^4.1.1",
     "eslint-config-prettier": "^2.2.0",
     "eslint-config-standard": "^10.2.1",
diff --git a/test/app.test.js b/test/app.test.js
index 9b0403c..8507c41 100644
--- a/test/app.test.js
+++ b/test/app.test.js
@@ -1,28 +1,45 @@
 const test = require("ava");
 const path = require("path");
 const request = require("supertest");
+const cheerio = require("cheerio");
 
 process.chdir(path.resolve(__dirname, "./testsite/"));
 const config = require(path.resolve(__dirname, "../src/modules/config.js"));
 
 const app = require("../src/app.js");
 
+const parseResponse = res =>
+  cheerio.load(res.text, {
+    normalizeWhitespace: true,
+    useHtmlParser2: true
+  });
+
 test("homepage", t => {
   return request(app.listen())
     .get("/")
     .expect(200)
-    .expect(/<title>Test Site<\/title>/)
-    .expect(/<h1>Test Site<\/h1>/)
-    .expect(/This is a test/)
-    .then(() => t.pass());
+    .then(parseResponse)
+    .then($ => {
+      t.is($("head > title").text(), config.site.title);
+      t.is($("h1").text(), config.site.title);
+      t.is($("main").length, 1);
+    });
 });
 
 test("post", t => {
   return request(app.listen())
     .get("/post/testfile")
     .expect(200)
-    .expect(/<h1>Lorem ipsum<\/h1>/)
-    .then(() => t.pass());
+    .then(parseResponse)
+    .then($ => {
+      t.is($("article h1").text(), "This is a test");
+      t.is(
+        $("article p").text(),
+        `Ut enim blandit volutpat maecenas? Volutpat blandit aliquam etiam erat \
+velit, scelerisque in dictum non, consectetur a erat nam at lectus \
+urna duis convallis convallis tellus, id interdum velit laoreet!`
+      );
+    });
 });
 
 test("post not found", t => {
diff --git a/test/testsite/posts/testfile.md b/test/testsite/posts/testfile.md
index bafc456..65f2122 100644
--- a/test/testsite/posts/testfile.md
+++ b/test/testsite/posts/testfile.md
@@ -3,4 +3,6 @@ Title = "This is a test"
 Description = "Test file"
 Tags = ["a", "b"]
 +++
-# Lorem ipsum
+Ut enim blandit volutpat maecenas? Volutpat blandit aliquam etiam erat
+velit, scelerisque in dictum non, consectetur a erat nam at lectus
+urna duis convallis convallis tellus, id interdum velit laoreet!
diff --git a/yarn.lock b/yarn.lock
index c9165f1..9060a49 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -37,6 +37,10 @@
     ansi-styles "^2.2.1"
     esutils "^2.0.2"
 
+"@types/node@^6.0.46":
+  version "6.0.79"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.79.tgz#5efe7d4a6d8c453c7e9eaf55d931f4a22fac5169"
+
 abbrev@1:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f"
@@ -671,6 +675,10 @@ bluebird@^3.0.0:
   version "3.5.0"
   resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c"
 
+boolbase@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+
 boom@2.x.x:
   version "2.10.1"
   resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
@@ -800,6 +808,17 @@ chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3:
     strip-ansi "^3.0.0"
     supports-color "^2.0.0"
 
+cheerio@^1.0.0-rc.1:
+  version "1.0.0-rc.1"
+  resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.1.tgz#2af37339eab713ef6b72cde98cefa672b87641fe"
+  dependencies:
+    css-select "~1.2.0"
+    dom-serializer "~0.1.0"
+    entities "~1.1.1"
+    htmlparser2 "^3.9.1"
+    lodash "^4.15.0"
+    parse5 "^3.0.1"
+
 chokidar@1.6.1, chokidar@^1.4.2:
   version "1.6.1"
   resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2"
@@ -1106,6 +1125,19 @@ crypto-random-string@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
 
+css-select@~1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
+  dependencies:
+    boolbase "~1.0.0"
+    css-what "2.1"
+    domutils "1.5.1"
+    nth-check "~1.0.1"
+
+css-what@2.1:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd"
+
 cssauron@^1.2.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/cssauron/-/cssauron-1.4.0.tgz#a6602dff7e04a8306dc0db9a551e92e8b5662ad8"
@@ -1300,7 +1332,7 @@ doctrine@^2.0.0:
     esutils "^2.0.2"
     isarray "^1.0.0"
 
-dom-serializer@0:
+dom-serializer@0, dom-serializer@~0.1.0:
   version "0.1.0"
   resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82"
   dependencies:
@@ -1321,6 +1353,13 @@ domhandler@^2.3.0:
   dependencies:
     domelementtype "1"
 
+domutils@1.5.1:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
+  dependencies:
+    dom-serializer "0"
+    domelementtype "1"
+
 domutils@^1.5.1:
   version "1.6.2"
   resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.6.2.tgz#1958cc0b4c9426e9ed367fb1c8e854891b0fa3ff"
@@ -2292,7 +2331,7 @@ hsts@2.0.0:
   dependencies:
     core-util-is "1.0.2"
 
-htmlparser2@^3.8.3:
+htmlparser2@^3.8.3, htmlparser2@^3.9.1:
   version "3.9.2"
   resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338"
   dependencies:
@@ -3082,7 +3121,7 @@ lodash.reduce@4.6.0:
   version "4.6.0"
   resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b"
 
-lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0:
+lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0:
   version "4.17.4"
   resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
 
@@ -3423,6 +3462,12 @@ npmlog@^4.0.2:
     gauge "~2.7.3"
     set-blocking "~2.0.0"
 
+nth-check@~1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4"
+  dependencies:
+    boolbase "~1.0.0"
+
 number-is-nan@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
@@ -3617,6 +3662,12 @@ parse-ms@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-1.0.1.tgz#56346d4749d78f23430ca0c713850aef91aa361d"
 
+parse5@^3.0.1:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.2.tgz#05eff57f0ef4577fb144a79f8b9a967a6cc44510"
+  dependencies:
+    "@types/node" "^6.0.46"
+
 parseurl@^1.3.0, parseurl@~1.3.1:
   version "1.3.1"
   resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56"