From f4b72b4754ffed12eb002bcf441448713e44751e Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Sun, 17 Dec 2017 19:35:01 -0500 Subject: [PATCH] add tests (#1) --- .gitignore | 3 ++- .travis.yml | 9 +++++++++ appveyor.yml | 15 +++++++++++++++ cypress.json | 4 ++++ cypress/fixtures/example.json | 5 +++++ cypress/integration/spec.js | 19 +++++++++++++++++++ cypress/plugins/index.js | 17 +++++++++++++++++ cypress/support/commands.js | 25 +++++++++++++++++++++++++ cypress/support/index.js | 20 ++++++++++++++++++++ package.json | 9 ++++++++- 10 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 .travis.yml create mode 100644 appveyor.yml create mode 100644 cypress.json create mode 100644 cypress/fixtures/example.json create mode 100644 cypress/integration/spec.js create mode 100644 cypress/plugins/index.js create mode 100644 cypress/support/commands.js create mode 100644 cypress/support/index.js diff --git a/.gitignore b/.gitignore index 22dd5a8..6ae87d3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .DS_Store node_modules .sapper -yarn.lock \ No newline at end of file +yarn.lock +cypress/screenshots diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..5e4120c --- /dev/null +++ b/.travis.yml @@ -0,0 +1,9 @@ +sudo: false +language: node_js +node_js: + - "stable" +env: + global: + - BUILD_TIMEOUT=10000 +install: npm install + diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 0000000..565a9ad --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,15 @@ +version: "{build}" + +shallow_clone: true + +init: + - git config --global core.autocrlf false + +environment: + matrix: + # node.js + - nodejs_version: stable + +install: + - ps: Install-Product node $env:nodejs_version + - npm install \ No newline at end of file diff --git a/cypress.json b/cypress.json new file mode 100644 index 0000000..27d948e --- /dev/null +++ b/cypress.json @@ -0,0 +1,4 @@ +{ + "baseUrl": "http://localhost:3000", + "videoRecording": false +} \ No newline at end of file diff --git a/cypress/fixtures/example.json b/cypress/fixtures/example.json new file mode 100644 index 0000000..da18d93 --- /dev/null +++ b/cypress/fixtures/example.json @@ -0,0 +1,5 @@ +{ + "name": "Using fixtures to represent data", + "email": "hello@cypress.io", + "body": "Fixtures are a great way to mock data for responses to routes" +} \ No newline at end of file diff --git a/cypress/integration/spec.js b/cypress/integration/spec.js new file mode 100644 index 0000000..9a7140d --- /dev/null +++ b/cypress/integration/spec.js @@ -0,0 +1,19 @@ +describe('Sapper template app', () => { + beforeEach(() => { + cy.visit('/') + }); + + it('has the correct

', () => { + cy.contains('h1', 'Great success!') + }); + + it('navigates to /about', () => { + cy.get('nav a').contains('about').click(); + cy.url().should('include', '/about'); + }); + + it('navigates to /blog', () => { + cy.get('nav a').contains('blog').click(); + cy.url().should('include', '/blog'); + }); +}); \ No newline at end of file diff --git a/cypress/plugins/index.js b/cypress/plugins/index.js new file mode 100644 index 0000000..fd170fb --- /dev/null +++ b/cypress/plugins/index.js @@ -0,0 +1,17 @@ +// *********************************************************** +// This example plugins/index.js can be used to load plugins +// +// You can change the location of this file or turn off loading +// the plugins file with the 'pluginsFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/plugins-guide +// *********************************************************** + +// This function is called when a project is opened or re-opened (e.g. due to +// the project's config changing) + +module.exports = (on, config) => { + // `on` is used to hook into various events Cypress emits + // `config` is the resolved Cypress config +} diff --git a/cypress/support/commands.js b/cypress/support/commands.js new file mode 100644 index 0000000..c1f5a77 --- /dev/null +++ b/cypress/support/commands.js @@ -0,0 +1,25 @@ +// *********************************************** +// This example commands.js shows you how to +// create various custom commands and overwrite +// existing commands. +// +// For more comprehensive examples of custom +// commands please read more here: +// https://on.cypress.io/custom-commands +// *********************************************** +// +// +// -- This is a parent command -- +// Cypress.Commands.add("login", (email, password) => { ... }) +// +// +// -- This is a child command -- +// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... }) +// +// +// -- This is a dual command -- +// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... }) +// +// +// -- This is will overwrite an existing command -- +// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) diff --git a/cypress/support/index.js b/cypress/support/index.js new file mode 100644 index 0000000..d68db96 --- /dev/null +++ b/cypress/support/index.js @@ -0,0 +1,20 @@ +// *********************************************************** +// This example support/index.js is processed and +// loaded automatically before your test files. +// +// This is a great place to put global configuration and +// behavior that modifies Cypress. +// +// You can change the location of this file or turn off +// automatically serving support files with the +// 'supportFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/configuration +// *********************************************************** + +// Import commands.js using ES2015 syntax: +import './commands' + +// Alternatively you can use CommonJS syntax: +// require('./commands') diff --git a/package.json b/package.json index 8ea2492..cf7eb77 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,10 @@ "version": "0.0.1", "scripts": { "dev": "node server.js", - "start": "cross-env NODE_ENV=production node server.js" + "start": "cross-env NODE_ENV=production node server.js", + "cy:run": "cypress run", + "cy:open": "cypress open", + "test": "run-p --race dev cy:run" }, "dependencies": { "compression": "^1.7.1", @@ -15,11 +18,15 @@ "glob": "^7.1.2", "marked": "^0.3.7", "node-fetch": "^1.7.3", + "npm-run-all": "^4.1.2", "sapper": "^0.1.1", "serve-static": "^1.13.1", "style-loader": "^0.19.0", "svelte": "^1.49.1", "svelte-loader": "^2.2.1", "uglifyjs-webpack-plugin": "^1.1.2" + }, + "devDependencies": { + "cypress": "^1.2.0" } }