From c25c6429cfa5a691551885e802d65f4763865474 Mon Sep 17 00:00:00 2001 From: wlsf82 Date: Mon, 25 Apr 2016 14:15:43 -0300 Subject: [PATCH 1/7] Updated dev dependencies for e2e testing. --- package.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 0dbe49b..b905a05 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,8 @@ "version": "0.0.5", "description": "High performance and high level web application framework.", "scripts": { - "test": "mocha test" + "test": "mocha test", + "webdriver-update": "node ./node_modules/protractor/bin/webdriver-manager update" }, "keywords": [ "framework", @@ -39,7 +40,9 @@ }, "devDependencies": { "mocha": "*", - "supertest": "0.13.x" + "supertest": "0.13.x", + "jasmine-spec-reporter": "^2.4.0", + "protractor": "3.0.0" }, "bin": { "choko": "bin/choko" From 5c7fd689762a815b215f839ee69611c68707ea78 Mon Sep 17 00:00:00 2001 From: wlsf82 Date: Mon, 25 Apr 2016 14:16:14 -0300 Subject: [PATCH 2/7] Created e2e test suite. --- test/e2e/page-objects/choko-org.po.js | 20 ++++++ .../page-objects/create-account-form.po.js | 11 ++++ .../page-objects/create-blog-post-form.po.js | 7 +++ test/e2e/page-objects/partials/messages.po.js | 7 +++ test/e2e/page-objects/sign-in-form.po.js | 9 +++ test/e2e/protractor.conf.js | 48 +++++++++++++++ test/e2e/specs/choko-org.spec.js | 61 +++++++++++++++++++ test/e2e/specs/create-account.spec.js | 45 ++++++++++++++ test/e2e/specs/create-blog-post.spec.js | 33 ++++++++++ test/e2e/specs/sign-in.spec.js | 42 +++++++++++++ 10 files changed, 283 insertions(+) create mode 100644 test/e2e/page-objects/choko-org.po.js create mode 100644 test/e2e/page-objects/create-account-form.po.js create mode 100644 test/e2e/page-objects/create-blog-post-form.po.js create mode 100644 test/e2e/page-objects/partials/messages.po.js create mode 100644 test/e2e/page-objects/sign-in-form.po.js create mode 100644 test/e2e/protractor.conf.js create mode 100644 test/e2e/specs/choko-org.spec.js create mode 100644 test/e2e/specs/create-account.spec.js create mode 100644 test/e2e/specs/create-blog-post.spec.js create mode 100644 test/e2e/specs/sign-in.spec.js diff --git a/test/e2e/page-objects/choko-org.po.js b/test/e2e/page-objects/choko-org.po.js new file mode 100644 index 0000000..6e02dac --- /dev/null +++ b/test/e2e/page-objects/choko-org.po.js @@ -0,0 +1,20 @@ +var ChokoOrg = function() { + + this.gettingStartedLink = element(by.css('.navbar-nav .ng-scope:nth-child(1) .ng-binding')); + this.demoLink = element(by.css('.navbar-nav .ng-scope:nth-child(2) .ng-binding')); + this.contributeLink = element(by.css('.navbar-nav .ng-scope:nth-child(3) .ng-binding')); + this.aboutLink = element(by.css('.navbar-nav .ng-scope:nth-child(4) .ng-binding')); + this.blogLink = element(by.css('.navbar-nav .ng-scope:nth-child(5) .ng-binding')); + + this.addBlogPostButton = element(by.css('.ng-binding.btn-primary')); + + this.signInLink = element(by.css('.btn-link')); + this.createAccountLink = element.all(by.css('.btn-primary')).first(); + + this.visit = function() { + browser.get(''); + }; + +}; + +module.exports = ChokoOrg; diff --git a/test/e2e/page-objects/create-account-form.po.js b/test/e2e/page-objects/create-account-form.po.js new file mode 100644 index 0000000..f467a50 --- /dev/null +++ b/test/e2e/page-objects/create-account-form.po.js @@ -0,0 +1,11 @@ +var CreateAccountForm = function() { + + this.emailField = element(by.id('element-create-account-email')); + this.usernameField = element(by.id('element-create-account-username')); + this.passwordField = element(by.id('element-create-account-password')); + this.confirmPasswordField = element(by.id('element-create-account-password-confirm')); + this.submitButton = element(by.id('element-create-account-submit')); + +}; + +module.exports = CreateAccountForm; diff --git a/test/e2e/page-objects/create-blog-post-form.po.js b/test/e2e/page-objects/create-blog-post-form.po.js new file mode 100644 index 0000000..49adc67 --- /dev/null +++ b/test/e2e/page-objects/create-blog-post-form.po.js @@ -0,0 +1,7 @@ +var CreateBlogPostForm = function() { + + this.saveButton = element(by.id('element-type-blog-submit')); + +}; + +module.exports = CreateBlogPostForm; diff --git a/test/e2e/page-objects/partials/messages.po.js b/test/e2e/page-objects/partials/messages.po.js new file mode 100644 index 0000000..fd6fad8 --- /dev/null +++ b/test/e2e/page-objects/partials/messages.po.js @@ -0,0 +1,7 @@ +var Messages = function() { + + this.error = element(by.css('.alert-danger')); + +}; + +module.exports = Messages; diff --git a/test/e2e/page-objects/sign-in-form.po.js b/test/e2e/page-objects/sign-in-form.po.js new file mode 100644 index 0000000..1bf92c1 --- /dev/null +++ b/test/e2e/page-objects/sign-in-form.po.js @@ -0,0 +1,9 @@ +var SignInForm = function() { + + this.usernameField = element(by.id('element-sign-in-username')); + this.passwordField = element(by.id('element-sign-in-password')); + this.submitButton = element(by.id('element-sign-in-submit')); + +}; + +module.exports = SignInForm; diff --git a/test/e2e/protractor.conf.js b/test/e2e/protractor.conf.js new file mode 100644 index 0000000..31a3186 --- /dev/null +++ b/test/e2e/protractor.conf.js @@ -0,0 +1,48 @@ +var SpecReporter = require('jasmine-spec-reporter'); + +exports.config = { + // Uses browser's own webdriver. + directConnect: true, + + // Spec patterns are relative to the location of this config. + specs: [ + 'specs/*.spec.js' + ], + + + capabilities: { + 'browserName': 'chrome', + 'chromeOptions': {'args': ['--disable-extensions']}, + + // Used for running all test files in paralel. + // Comment it to run all tests in one browser. + shardTestFiles: true, + maxInstances: 4, + }, + + // Define things that will happen before start testing. + onPrepare: function() { + // Add better test report on console. + jasmine.getEnv().addReporter(new SpecReporter({ + displayFailuresSummary: true, + displayFailedSpec: true, + displaySuiteNumber: true, + displaySpecDuration: true + })); + + browser.driver.manage().window().maximize(); + }, + + + // A base URL for your application under test. Calls to protractor.get() + // with relative paths will be prepended with this. + baseUrl: 'http://choko.org/', + + jasmineNodeOpts: { + onComplete: null, + isVerbose: false, + showColors: true, + includeStackTrace: true, + defaultTimeoutInterval: 999999 + } +}; diff --git a/test/e2e/specs/choko-org.spec.js b/test/e2e/specs/choko-org.spec.js new file mode 100644 index 0000000..8c7eb5d --- /dev/null +++ b/test/e2e/specs/choko-org.spec.js @@ -0,0 +1,61 @@ +var ChokoOrg = require('../page-objects/choko-org.po'); + +describe( 'Choko.org', function() { + + var chokoOrg = new ChokoOrg(); + + beforeEach(function() { + chokoOrg.visit(); + }); + + it( 'navigate to Getting started', function() { + + chokoOrg.gettingStartedLink.click(); + + browser.getCurrentUrl().then(function(url) { + expect(url).toEqual('http://choko.org/getting-started'); + }); + + }); + + it( 'navigate to Demo', function() { + + chokoOrg.demoLink.click(); + + browser.getCurrentUrl().then(function(url) { + expect(url).toEqual('http://demo.choko.org/'); + }); + + }); + + it( 'navigate to Contribute', function() { + + chokoOrg.contributeLink.click(); + + browser.getCurrentUrl().then(function(url) { + expect(url).toEqual('http://choko.org/contribute'); + }); + + }); + + it( 'navigate to About', function() { + + chokoOrg.aboutLink.click(); + + browser.getCurrentUrl().then(function(url) { + expect(url).toEqual('http://choko.org/about'); + }); + + }); + + it( 'navigate to Blog', function() { + + chokoOrg.blogLink.click(); + + browser.getCurrentUrl().then(function(url) { + expect(url).toEqual('http://choko.org/blog'); + }); + + }); + +}); diff --git a/test/e2e/specs/create-account.spec.js b/test/e2e/specs/create-account.spec.js new file mode 100644 index 0000000..7cc2e81 --- /dev/null +++ b/test/e2e/specs/create-account.spec.js @@ -0,0 +1,45 @@ +var ChokoOrg = require('../page-objects/choko-org.po'); +var CreateAccountForm = require('../page-objects/create-account-form.po'); +var Messages = require('../page-objects/partials/messages.po'); + +describe( 'Create account', function() { + + var chokoOrg = new ChokoOrg(); + var createAccountForm = new CreateAccountForm(); + var messages = new Messages(); + + beforeEach(function() { + chokoOrg.visit(); + chokoOrg.createAccountLink.click(); + }); + + it( 'navigate to create an account', function() { + + browser.getCurrentUrl().then(function(url) { + expect(url).toEqual('http://choko.org/create-account'); + }); + + }); + + it( 'try to create an account without filling any field', function() { + + createAccountForm.submitButton.click(); + + expect(messages.error.isDisplayed()).toBe(true); + + }); + + it( 'password must match', function() { + + createAccountForm.emailField.sendKeys('valid@email.com'); + createAccountForm.usernameField.sendKeys('joe'); + createAccountForm.passwordField.sendKeys('abc'); + createAccountForm.confirmPasswordField.sendKeys('def'); + + createAccountForm.submitButton.click(); + + expect(messages.error.isDisplayed()).toBe(true); + + }); + +}); diff --git a/test/e2e/specs/create-blog-post.spec.js b/test/e2e/specs/create-blog-post.spec.js new file mode 100644 index 0000000..d8714c0 --- /dev/null +++ b/test/e2e/specs/create-blog-post.spec.js @@ -0,0 +1,33 @@ +var ChokoOrg = require('../page-objects/choko-org.po'); +var CreateBlogPostForm = require('../page-objects/create-blog-post-form.po'); +var Messages = require('../page-objects/partials/messages.po'); + +describe( 'Blog', function() { + + var chokoOrg = new ChokoOrg(); + var createBlogPostForm = new CreateBlogPostForm(); + var messages = new Messages(); + + beforeEach(function() { + chokoOrg.visit(); + chokoOrg.blogLink.click(); + chokoOrg.addBlogPostButton.click(); + }); + + it( 'access create a blog post form from the add blog post button', function() { + + browser.getCurrentUrl().then(function(url) { + expect(url).toEqual('http://choko.org/create/blog'); + }); + + }); + + it( 'try to create a blog post without filling any field', function() { + + createBlogPostForm.saveButton.click(); + + expect(messages.error.isDisplayed()).toBe(true); + + }); + +}); diff --git a/test/e2e/specs/sign-in.spec.js b/test/e2e/specs/sign-in.spec.js new file mode 100644 index 0000000..6a36fc9 --- /dev/null +++ b/test/e2e/specs/sign-in.spec.js @@ -0,0 +1,42 @@ +var ChokoOrg = require('../page-objects/choko-org.po'); +var Messages = require('../page-objects/partials/messages.po'); +var SignInForm = require('../page-objects/sign-in-form.po'); + +describe( 'Sign in', function() { + + var chokoOrg = new ChokoOrg(); + var messages = new Messages(); + var signInForm = new SignInForm(); + + beforeEach(function() { + chokoOrg.visit(); + chokoOrg.signInLink.click(); + }); + + it( 'navigate to sign in', function() { + + browser.getCurrentUrl().then(function(url) { + expect(url).toEqual('http://choko.org/sign-in'); + }); + + }); + + it( 'try to sign in without filling user and password', function() { + + signInForm.submitButton.click(); + + expect(messages.error.isDisplayed()).toBe(true); + + }); + + it( 'try to sign in with invalid user and password', function() { + + signInForm.usernameField.sendKeys('invalid'); + signInForm.passwordField.sendKeys('invalid'); + signInForm.submitButton.click(); + + expect(messages.error.isDisplayed()).toBe(true); + + }); + +}); From 524dc3ef0881af6ec1e3abe54ba0b5cd5b155f9e Mon Sep 17 00:00:00 2001 From: Joseph Date: Sat, 4 Jun 2016 04:12:05 -0500 Subject: [PATCH 3/7] Refactored gulp tasks. --- gulp/build.js | 11 +++++++++++ gulp/publish.js | 27 +++++++++++++++++++++++++++ gulp/server.js | 31 +++++++++++++++++++++++++++++++ gulp/test.js | 33 +++++++++++++++++++++++++++++++++ gulpfile.js | 38 +++----------------------------------- package.json | 10 ++++++---- 6 files changed, 111 insertions(+), 39 deletions(-) create mode 100644 gulp/build.js create mode 100644 gulp/publish.js create mode 100644 gulp/server.js create mode 100644 gulp/test.js diff --git a/gulp/build.js b/gulp/build.js new file mode 100644 index 0000000..f22f042 --- /dev/null +++ b/gulp/build.js @@ -0,0 +1,11 @@ +var gulp = require('gulp'); +var bower = require('gulp-bower'); + +// Bower install. +gulp.task('bower', function() { + return bower(); +}); + + +// Build Choko. +gulp.task('build', ['bower']); diff --git a/gulp/publish.js b/gulp/publish.js new file mode 100644 index 0000000..b8b73ea --- /dev/null +++ b/gulp/publish.js @@ -0,0 +1,27 @@ +var gulp = require('gulp'); +var git = require('gulp-git'); +var spawn = require('child_process').spawn; + +// Publish a new release to npm. +gulp.task('publish', ['build'], function(done) { + git.status({ + // Use short format. + args: '-s' + }, + function (err, stdout) { + if (err) { + throw err; + } + if (!stdout) { + // We have a clean working directory, proceed. + spawn('npm', ['publish'], { + stdio: 'inherit' + }).on('close', done); + } + else { + // Working directory not clean, abort. + console.log('Working directory not clean, aborting...'); + done(); + } + }); +}); diff --git a/gulp/server.js b/gulp/server.js new file mode 100644 index 0000000..e82ba00 --- /dev/null +++ b/gulp/server.js @@ -0,0 +1,31 @@ +/** + * Server related tasks. + */ + +var fs = require('fs'), + gulp = require('gulp'), async = require('async'), + choko = require('../lib/application'), + server; + +/** + * Initiate El-Tracker with a custom testing database. + */ +gulp.task('server:test', function (done) { + + // Create a server. + module.exports.server = server = new choko('./test/applications/test-app'); + + // Start the server. + server.start(3000, function (error, server) { + var droppers = Object.keys(server.collections).map(function (collection) { + return function (next) { + server.collections[collection].drop(next); + }; + }); + + // @todo: handle erros on droppers. + async.parallel(droppers, function (err) { + done(); + }); + }); +}); diff --git a/gulp/test.js b/gulp/test.js new file mode 100644 index 0000000..aa16bd4 --- /dev/null +++ b/gulp/test.js @@ -0,0 +1,33 @@ +/** + * Test related tasks. + */ + +var gulp = require('gulp'), + spawn = require('child_process').spawn, + app = require('./server'); + +/** + * Print buffer string. + */ +function logBuffer(data) { + console.log(data.toString()); +} + +/** + * E2E test: uses Protractor to perform e2e tests. + */ +gulp.task('test:e2e', ['server:test'], function (done) { + var protractor = spawn('protractor', ['test/e2e/protractor.conf.js']); + + protractor.stdout.on('data', logBuffer); + protractor.stderr.on('data', logBuffer); + + protractor.on('exit', function (code) { + + // Stop server. + app.server.stop(done); + + // @todo: fix Choko stop issue. + process.exit(); + }); +}); diff --git a/gulpfile.js b/gulpfile.js index 39e9a0a..3e6391e 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,36 +1,4 @@ -var gulp = require('gulp'); -var bower = require('gulp-bower'); -var git = require('gulp-git'); -var spawn = require('child_process').spawn; +var requireAll = require('require-dir'); -// Bower install. -gulp.task('bower', function() { - return bower(); -}); - -// Publish a new release to npm. -gulp.task('publish', ['build'], function(done) { - git.status({ - // Use short format. - args: '-s' - }, - function (err, stdout) { - if (err) { - throw err; - } - if (!stdout) { - // We have a clean working directory, proceed. - spawn('npm', ['publish'], { - stdio: 'inherit' - }).on('close', done); - } - else { - // Working directory not clean, abort. - console.log('Working directory not clean, aborting...'); - done(); - } - }); -}); - -// Build Choko. -gulp.task('build', ['bower']); +// Load all tasks. +requireAll('./gulp'); diff --git a/package.json b/package.json index 3b0bc61..ce1f497 100644 --- a/package.json +++ b/package.json @@ -40,13 +40,15 @@ }, "devDependencies": { "bower": "*", - "gulp": "*", + "gulp": "^3.9.1", "gulp-bower": "*", "gulp-git": "*", - "mocha": "*", - "supertest": "0.13.x", + "gulp-protractor": "^2.3.0", "jasmine-spec-reporter": "^2.4.0", - "protractor": "3.0.0" + "mocha": "*", + "protractor": "3.0.0", + "require-dir": "^0.3.0", + "supertest": "0.13.x" }, "bin": { "choko": "bin/choko" From e6075250d6db26d0f048a9418a3bdb2384323564 Mon Sep 17 00:00:00 2001 From: Joseph Date: Sat, 4 Jun 2016 04:13:46 -0500 Subject: [PATCH 4/7] Refactored e2e configuration and tests. --- test/applications/test-app/settings.json | 2 +- test/e2e/page-objects/choko-org.po.js | 20 -------- test/e2e/page-objects/home.po.js | 12 +++++ test/e2e/protractor.conf.js | 2 +- test/e2e/specs/choko-org.spec.js | 61 ------------------------ test/e2e/specs/create-account.spec.js | 10 ++-- test/e2e/specs/create-blog-post.spec.js | 33 ------------- test/e2e/specs/sign-in.spec.js | 10 ++-- 8 files changed, 24 insertions(+), 126 deletions(-) delete mode 100644 test/e2e/page-objects/choko-org.po.js create mode 100644 test/e2e/page-objects/home.po.js delete mode 100644 test/e2e/specs/choko-org.spec.js delete mode 100644 test/e2e/specs/create-blog-post.spec.js diff --git a/test/applications/test-app/settings.json b/test/applications/test-app/settings.json index 6abaccd..c59ada6 100644 --- a/test/applications/test-app/settings.json +++ b/test/applications/test-app/settings.json @@ -7,4 +7,4 @@ "extensions": { "test-extension": {} } -} \ No newline at end of file +} diff --git a/test/e2e/page-objects/choko-org.po.js b/test/e2e/page-objects/choko-org.po.js deleted file mode 100644 index 6e02dac..0000000 --- a/test/e2e/page-objects/choko-org.po.js +++ /dev/null @@ -1,20 +0,0 @@ -var ChokoOrg = function() { - - this.gettingStartedLink = element(by.css('.navbar-nav .ng-scope:nth-child(1) .ng-binding')); - this.demoLink = element(by.css('.navbar-nav .ng-scope:nth-child(2) .ng-binding')); - this.contributeLink = element(by.css('.navbar-nav .ng-scope:nth-child(3) .ng-binding')); - this.aboutLink = element(by.css('.navbar-nav .ng-scope:nth-child(4) .ng-binding')); - this.blogLink = element(by.css('.navbar-nav .ng-scope:nth-child(5) .ng-binding')); - - this.addBlogPostButton = element(by.css('.ng-binding.btn-primary')); - - this.signInLink = element(by.css('.btn-link')); - this.createAccountLink = element.all(by.css('.btn-primary')).first(); - - this.visit = function() { - browser.get(''); - }; - -}; - -module.exports = ChokoOrg; diff --git a/test/e2e/page-objects/home.po.js b/test/e2e/page-objects/home.po.js new file mode 100644 index 0000000..efd71bb --- /dev/null +++ b/test/e2e/page-objects/home.po.js @@ -0,0 +1,12 @@ +var Home = function() { + + this.signInLink = element(by.css('.btn-link')); + this.createAccountLink = element.all(by.css('.btn-primary')).first(); + + this.visit = function() { + browser.get(''); + }; + +}; + +module.exports = Home; diff --git a/test/e2e/protractor.conf.js b/test/e2e/protractor.conf.js index 31a3186..585389a 100644 --- a/test/e2e/protractor.conf.js +++ b/test/e2e/protractor.conf.js @@ -36,7 +36,7 @@ exports.config = { // A base URL for your application under test. Calls to protractor.get() // with relative paths will be prepended with this. - baseUrl: 'http://choko.org/', + baseUrl: 'http://localhost:3000/', jasmineNodeOpts: { onComplete: null, diff --git a/test/e2e/specs/choko-org.spec.js b/test/e2e/specs/choko-org.spec.js deleted file mode 100644 index 8c7eb5d..0000000 --- a/test/e2e/specs/choko-org.spec.js +++ /dev/null @@ -1,61 +0,0 @@ -var ChokoOrg = require('../page-objects/choko-org.po'); - -describe( 'Choko.org', function() { - - var chokoOrg = new ChokoOrg(); - - beforeEach(function() { - chokoOrg.visit(); - }); - - it( 'navigate to Getting started', function() { - - chokoOrg.gettingStartedLink.click(); - - browser.getCurrentUrl().then(function(url) { - expect(url).toEqual('http://choko.org/getting-started'); - }); - - }); - - it( 'navigate to Demo', function() { - - chokoOrg.demoLink.click(); - - browser.getCurrentUrl().then(function(url) { - expect(url).toEqual('http://demo.choko.org/'); - }); - - }); - - it( 'navigate to Contribute', function() { - - chokoOrg.contributeLink.click(); - - browser.getCurrentUrl().then(function(url) { - expect(url).toEqual('http://choko.org/contribute'); - }); - - }); - - it( 'navigate to About', function() { - - chokoOrg.aboutLink.click(); - - browser.getCurrentUrl().then(function(url) { - expect(url).toEqual('http://choko.org/about'); - }); - - }); - - it( 'navigate to Blog', function() { - - chokoOrg.blogLink.click(); - - browser.getCurrentUrl().then(function(url) { - expect(url).toEqual('http://choko.org/blog'); - }); - - }); - -}); diff --git a/test/e2e/specs/create-account.spec.js b/test/e2e/specs/create-account.spec.js index 7cc2e81..41ba6f4 100644 --- a/test/e2e/specs/create-account.spec.js +++ b/test/e2e/specs/create-account.spec.js @@ -1,22 +1,22 @@ -var ChokoOrg = require('../page-objects/choko-org.po'); +var Home = require('../page-objects/home.po'); var CreateAccountForm = require('../page-objects/create-account-form.po'); var Messages = require('../page-objects/partials/messages.po'); describe( 'Create account', function() { - var chokoOrg = new ChokoOrg(); + var home = new Home(); var createAccountForm = new CreateAccountForm(); var messages = new Messages(); beforeEach(function() { - chokoOrg.visit(); - chokoOrg.createAccountLink.click(); + home.visit(); + home.createAccountLink.click(); }); it( 'navigate to create an account', function() { browser.getCurrentUrl().then(function(url) { - expect(url).toEqual('http://choko.org/create-account'); + expect(url).toEqual('http://localhost:3000/create-account'); }); }); diff --git a/test/e2e/specs/create-blog-post.spec.js b/test/e2e/specs/create-blog-post.spec.js deleted file mode 100644 index d8714c0..0000000 --- a/test/e2e/specs/create-blog-post.spec.js +++ /dev/null @@ -1,33 +0,0 @@ -var ChokoOrg = require('../page-objects/choko-org.po'); -var CreateBlogPostForm = require('../page-objects/create-blog-post-form.po'); -var Messages = require('../page-objects/partials/messages.po'); - -describe( 'Blog', function() { - - var chokoOrg = new ChokoOrg(); - var createBlogPostForm = new CreateBlogPostForm(); - var messages = new Messages(); - - beforeEach(function() { - chokoOrg.visit(); - chokoOrg.blogLink.click(); - chokoOrg.addBlogPostButton.click(); - }); - - it( 'access create a blog post form from the add blog post button', function() { - - browser.getCurrentUrl().then(function(url) { - expect(url).toEqual('http://choko.org/create/blog'); - }); - - }); - - it( 'try to create a blog post without filling any field', function() { - - createBlogPostForm.saveButton.click(); - - expect(messages.error.isDisplayed()).toBe(true); - - }); - -}); diff --git a/test/e2e/specs/sign-in.spec.js b/test/e2e/specs/sign-in.spec.js index 6a36fc9..c6ebdc8 100644 --- a/test/e2e/specs/sign-in.spec.js +++ b/test/e2e/specs/sign-in.spec.js @@ -1,22 +1,22 @@ -var ChokoOrg = require('../page-objects/choko-org.po'); +var Home = require('../page-objects/home.po'); var Messages = require('../page-objects/partials/messages.po'); var SignInForm = require('../page-objects/sign-in-form.po'); describe( 'Sign in', function() { - var chokoOrg = new ChokoOrg(); + var home = new Home(); var messages = new Messages(); var signInForm = new SignInForm(); beforeEach(function() { - chokoOrg.visit(); - chokoOrg.signInLink.click(); + home.visit(); + home.signInLink.click(); }); it( 'navigate to sign in', function() { browser.getCurrentUrl().then(function(url) { - expect(url).toEqual('http://choko.org/sign-in'); + expect(url).toEqual('http://localhost:3000/sign-in'); }); }); From 8f1a84c079142313ff3709ede17b6934cd6028b5 Mon Sep 17 00:00:00 2001 From: Joseph Date: Sat, 4 Jun 2016 05:25:41 -0500 Subject: [PATCH 5/7] Moved unit tests to test/unit directory. --- test/mocha.opts | 1 + test/{ => unit}/init.test.js | 4 ++-- test/{ => unit}/lib/userHelper.js | 0 test/{ => unit}/rest/rest.test.js | 0 test/{ => unit}/user/user.test.js | 0 5 files changed, 3 insertions(+), 2 deletions(-) rename test/{ => unit}/init.test.js (80%) rename test/{ => unit}/lib/userHelper.js (100%) rename test/{ => unit}/rest/rest.test.js (100%) rename test/{ => unit}/user/user.test.js (100%) diff --git a/test/mocha.opts b/test/mocha.opts index 748f8d8..65b4e04 100644 --- a/test/mocha.opts +++ b/test/mocha.opts @@ -1,2 +1,3 @@ +test/unit --recursive --timeout 10000 diff --git a/test/init.test.js b/test/unit/init.test.js similarity index 80% rename from test/init.test.js rename to test/unit/init.test.js index b4eed6e..4effd7e 100644 --- a/test/init.test.js +++ b/test/unit/init.test.js @@ -1,11 +1,11 @@ -var Application = require('../lib/application'); +var Application = require('../../lib/application'); var express = require('express'); var async = require('async'); var path = require('path'); var app; before(function(done) { - app = new Application(path.normalize(__dirname + '/applications/test-app')); + app = new Application(path.normalize(__dirname + '/../applications/test-app')); this.getApp = function() { return app; }; diff --git a/test/lib/userHelper.js b/test/unit/lib/userHelper.js similarity index 100% rename from test/lib/userHelper.js rename to test/unit/lib/userHelper.js diff --git a/test/rest/rest.test.js b/test/unit/rest/rest.test.js similarity index 100% rename from test/rest/rest.test.js rename to test/unit/rest/rest.test.js diff --git a/test/user/user.test.js b/test/unit/user/user.test.js similarity index 100% rename from test/user/user.test.js rename to test/unit/user/user.test.js From 52e5b2e66b80aed085f0ea68f69ab08908887f74 Mon Sep 17 00:00:00 2001 From: Joseph Date: Sat, 4 Jun 2016 05:28:06 -0500 Subject: [PATCH 6/7] Added test:unit gul task to run unit tests. --- gulp/test.js | 13 +++++++++++++ package.json | 4 +++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/gulp/test.js b/gulp/test.js index aa16bd4..1477a26 100644 --- a/gulp/test.js +++ b/gulp/test.js @@ -3,6 +3,8 @@ */ var gulp = require('gulp'), + mocha = require('gulp-spawn-mocha'), + sequence = require('gulp-sequence'), spawn = require('child_process').spawn, app = require('./server'); @@ -31,3 +33,14 @@ gulp.task('test:e2e', ['server:test'], function (done) { process.exit(); }); }); + +/** + * Unit test: uses Mocha to perform unit tests. + */ +gulp.task('test:unit', function() { + return gulp + .src(['test/unit/*.test.js']) + .pipe(mocha()); +}); + +gulp.task('test', sequence('test:unit', 'test:e2e')); diff --git a/package.json b/package.json index ce1f497..14c25f1 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.0.6", "description": "High performance and high level web application framework.", "scripts": { - "test": "mocha test", + "test": "gulp test", "webdriver-update": "node ./node_modules/protractor/bin/webdriver-manager update" }, "keywords": [ @@ -44,6 +44,8 @@ "gulp-bower": "*", "gulp-git": "*", "gulp-protractor": "^2.3.0", + "gulp-sequence": "^0.4.5", + "gulp-spawn-mocha": "^2.2.2", "jasmine-spec-reporter": "^2.4.0", "mocha": "*", "protractor": "3.0.0", From 2f50273e091df8de57b7b245db28a0e92b959c13 Mon Sep 17 00:00:00 2001 From: Joseph Date: Sat, 4 Jun 2016 05:30:45 -0500 Subject: [PATCH 7/7] Added test:unit gulp task to run unit tests. --- test/applications/test-app/settings.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/applications/test-app/settings.json b/test/applications/test-app/settings.json index c59ada6..3400cc1 100644 --- a/test/applications/test-app/settings.json +++ b/test/applications/test-app/settings.json @@ -1,5 +1,5 @@ { - "database": "mongodb://localhost/test-application", + "database": "mongodb://172.17.0.2/test-application", "sessionSecret": "no-secrets", "application": { "name": "Test application"