Giter Club home page Giter Club logo

qualityfaster's Introduction

Build Status CircleCI

Quality, Faster.

The companion code repository for Xolv.io's "Quality Faster" knowledge base and guide.

The Tech Stack

The following tools and technologies are used in this repository:

Build & Test

  • Gulp.js for orchestration.
  • Mocha to test server-side Node.js code.
  • Karma to test client-side browser code.
  • Chimp.js to run acceptance and end-to-end tests.
  • Wallaby.js to run in-IDE unit tests in real time. (Optional but HIGHLY recommended)

Application

Installation

git clone https://github.com/xolvio/quality-faster.git
cd quality-faster
npm install

Usage

Development Mode

When you are developing, you want the fastest possible feedback to let you know if you've broken any tests. To do that, this code repository allows you to run client, server, acceptance and end-to-end tests at hyper speeds.

Option A: Paid (Recommended)

Wallaby.js provides you with real-time feedback in your IDE. This feature is completely inline with the "Quality Faster" ethos and therefore it is highly recommended. The tool saves you a lot of time which means money, and so it pays back for itself in no time.

You'll need to first install Wallaby.js for your IDE. You can find a list of supported IDEs here and instructions on how to install and run the plugin.

Once you've installed the plugin, you just need to create two run configurations for the client and server using the .wallaby-client.js and .wallaby-server.js files.

At the time of writing this, Wallaby only supports running one mode at a time, so you'll need to switch between the server and client modes as you work on the respective files.

In addition to running Wallaby.js server/client tests, you'll also need to run acceptance and end-to-end tests using Chimp's watch mode as follows:

npm run watch:domain
npm run watch:end-to-end

Option B: Free

You also have the option of using the watch modes we have provided using Gulp and Karma.

Start each commands below in a separate terminal window, and to make that sure you can see all of them with the IDE.

npm run watch:client-unit
npm run watch:server-unit
npm run watch:domain
npm run watch:end-to-end

You can also start all the modes in one terminal, but be warned that the terminal output can get noisy:

npm run watch

Build / CI Mode

Using the command below, you can run all the tests in the following sequence: client > server > e2e

npm test

And if you want to run single test modes individually, you can do so like this:

npm run test:client-unit
npm run test:server-unit
npm run test:domain
npm run test:end-to-end

qualityfaster's People

Contributors

samhatoum avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

qualityfaster's Issues

Attempting to import from src/node_modules directory doesn't work

I'm finding that I cannot import packages that have been installed in src/node_modules, I get 'module not found' errors. Installing these packages into the top level node_modules directory fixes the issue, but I think we should be able to have our non testing related packages only installed in the src/node_modules folder.

I'm not sure why webpack isn't finding this node_modules directory, as node should scan the tree for all available install locations right?

My workaround was to change the webpackConfig and explicitly list the node_modules directory in src as a root.

var webpackConfig = {
resolve: {
root: [
path.join(wallaby.projectCacheDir, 'src'),
path.join(wallaby.localProjectDir, 'src','node_modules')
],
extensions: ['', '.js', '.jsx', '.json']
},
module: {
loaders: [
// JavaScript is handled by the Wallaby Babel compiler
{ test: /.json$/, loader: 'json-loader' }
]
}
};

Any ideas on if this is the correct approach here? If so should we make this change?

Project does not run

Hi, I downloaded a fresh copy on my Mac. Did npm install and npm start but I'm getting following massive error:

It looks like Chimp is running, but when I make test fail in one of the step definitions all I get in console is:

[chimp] Running...
[chimp] domain scenarios...

Error ...

✝  ~/Github/3rdParty/automated-testing-best-practices   master  npm start

> @ start /Users/tomi/Github/3rdParty/automated-testing-best-practices
> .scripts/start.js

[[[[[ ~/Github/3rdParty/automated-testing-best-practices/src ]]]]]

=> Started proxy.
=> Started MongoDB.

=> Meteor 1.3.4: [email protected], .babelrc support, improved import declarations,
DDP update batching, and more:
https://github.com/meteor/meteor/blob/master/History.md#v134

This release is being downloaded in the background. Update your app to
Meteor 1.3.4 by running 'meteor update'.

=> Started your app.

inside no mirror   --path=/Users/tomi/Github/3rdParty/automated-testing-best-practices/tests/specifications --domainSteps=/Users/tomi/Github/3rdParty/automated-testing-best-practices/tests/step_definitions/domain --criticalSteps=/Users/tomi/Github/3rdParty/automated-testing-best-practices/tests/step_definitions/critical --watchSource=/Users/tomi/Github/3rdParty/automated-testing-best-practices/tests --singleSnippetPerFile=1 --no-source --watch
chimpBin  /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/.bin/chimp
command  --ddp=http://localhost:3000 --path=/Users/tomi/Github/3rdParty/automated-testing-best-practices/tests/specifications --domainSteps=/Users/tomi/Github/3rdParty/automated-testing-best-practices/tests/step_definitions/domain --criticalSteps=/Users/tomi/Github/3rdParty/automated-testing-best-practices/tests/step_definitions/critical --watchSource=/Users/tomi/Github/3rdParty/automated-testing-best-practices/tests --singleSnippetPerFile=1 --no-source --watch
=> App running at: http://localhost:3000
(node) v8::ObjectTemplate::Set() with non-primitive values is deprecated
(node) and will stop working in the next major release.

==== JS stack trace =========================================

Security context: 0x349ff65c9e59 <JS Object>#0#
    1: .node [module.js:568] [pc=0x3508226f4c4] (this=0x322dae0b6ee1 <an Object with map 0x17d1eda17d41>#1#,module=0x34112a0f8b69 <a Module with map 0x17d1eda18319>#2#,filename=0x34112a0f8ad9 <String[114]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/fsevents/build/Release/fse.node>)
    2: load [module.js:458] [pc=0x35082234f92] (this=0x34112a0f8b69 <a Module with map 0x17d1eda18319>#2#,filename=0x34112a0f8ad9 <String[114]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/fsevents/build/Release/fse.node>)
    3: tryModuleLoad(aka tryModuleLoad) [module.js:417] [pc=0x35082234abd] (this=0x349ff6504189 <undefined>,module=0x34112a0f8b69 <a Module with map 0x17d1eda18319>#2#,filename=0x34112a0f8ad9 <String[114]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/fsevents/build/Release/fse.node>)
    4: _load [module.js:409] [pc=0x350822306a2] (this=0x322dae0b6e99 <JS Function Module (SharedFunctionInfo 0x322dae024141)>#3#,request=0x2a8c315690c9 <String[19]: ./build/Release/fse>,parent=0x34112a0f2fd1 <a Module with map 0x17d1eda18319>#4#,isMain=0x349ff6504299 <false>)
    5: require [module.js:468] [pc=0x3508223e573] (this=0x34112a0f2fd1 <a Module with map 0x17d1eda18319>#4#,path=0x2a8c315690c9 <String[19]: ./build/Release/fse>)
    6: require(aka require) [internal/module.js:20] [pc=0x3508223e2a6] (this=0x349ff6504189 <undefined>,path=0x2a8c315690c9 <String[19]: ./build/Release/fse>)
    7: /* anonymous */ [/Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/fsevents/fsevents.js:9] [pc=0x3508226ecbf] (this=0x34112a0f3021 <an Object with map 0x1bd817207b71>#5#,exports=0x34112a0f3021 <an Object with map 0x1bd817207b71>#5#,require=0x34112a0f7419 <JS Function require (SharedFunctionInfo 0x322dae054851)>#6#,module=0x34112a0f2fd1 <a Module with map 0x17d1eda18319>#4#,__filename=0x34112a0f2f51 <String[103]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/fsevents/fsevents.js>,__dirname=0x34112a0f73b1 <String[91]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/fsevents>)
    8: _compile [module.js:541] [pc=0x3508223da90] (this=0x34112a0f2fd1 <a Module with map 0x17d1eda18319>#4#,content=0x34112a0f3e79 <Very long string[3059]>#7#,filename=0x34112a0f2f51 <String[103]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/fsevents/fsevents.js>)
    9: .js [module.js:550] [pc=0x3508223658b] (this=0x322dae0b6ee1 <an Object with map 0x17d1eda17d41>#1#,module=0x34112a0f2fd1 <a Module with map 0x17d1eda18319>#4#,filename=0x34112a0f2f51 <String[103]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/fsevents/fsevents.js>)
   10: load [module.js:458] [pc=0x35082234f92] (this=0x34112a0f2fd1 <a Module with map 0x17d1eda18319>#4#,filename=0x34112a0f2f51 <String[103]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/fsevents/fsevents.js>)
   11: tryModuleLoad(aka tryModuleLoad) [module.js:417] [pc=0x35082234abd] (this=0x349ff6504189 <undefined>,module=0x34112a0f2fd1 <a Module with map 0x17d1eda18319>#4#,filename=0x34112a0f2f51 <String[103]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/fsevents/fsevents.js>)
   12: _load [module.js:409] [pc=0x350822306a2] (this=0x322dae0b6e99 <JS Function Module (SharedFunctionInfo 0x322dae024141)>#3#,request=0x322dae078341 <String[8]: fsevents>,parent=0x34112a0e6e29 <a Module with map 0x17d1eda18319>#8#,isMain=0x349ff6504299 <false>)
   13: require [module.js:468] [pc=0x3508223e573] (this=0x34112a0e6e29 <a Module with map 0x17d1eda18319>#8#,path=0x322dae078341 <String[8]: fsevents>)
   14: require(aka require) [internal/module.js:20] [pc=0x3508223e2a6] (this=0x349ff6504189 <undefined>,path=0x322dae078341 <String[8]: fsevents>)
   15: /* anonymous */ [/Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chokidar/lib/fsevents-handler.js:7] [pc=0x3508226e36a] (this=0x34112a0e6e79 <an Object with map 0x1bd817207b71>#9#,exports=0x34112a0e6e79 <an Object with map 0x1bd817207b71>#9#,require=0x34112a0edfb9 <JS Function require (SharedFunctionInfo 0x322dae054851)>#10#,module=0x34112a0e6e29 <a Module with map 0x17d1eda18319>#8#,__filename=0x34112a0e6d11 <String[115]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chokidar/lib/fsevents-handler.js>,__dirname=0x34112a0edf51 <String[95]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chokidar/lib>)
   16: _compile [module.js:541] [pc=0x3508223da90] (this=0x34112a0e6e29 <a Module with map 0x17d1eda18319>#8#,content=0x34112a0e7bd1 <Very long string[12062]>#11#,filename=0x34112a0e6d11 <String[115]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chokidar/lib/fsevents-handler.js>)
   17: .js [module.js:550] [pc=0x3508223658b] (this=0x322dae0b6ee1 <an Object with map 0x17d1eda17d41>#1#,module=0x34112a0e6e29 <a Module with map 0x17d1eda18319>#8#,filename=0x34112a0e6d11 <String[115]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chokidar/lib/fsevents-handler.js>)
   18: load [module.js:458] [pc=0x35082234f92] (this=0x34112a0e6e29 <a Module with map 0x17d1eda18319>#8#,filename=0x34112a0e6d11 <String[115]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chokidar/lib/fsevents-handler.js>)
   19: tryModuleLoad(aka tryModuleLoad) [module.js:417] [pc=0x35082234abd] (this=0x349ff6504189 <undefined>,module=0x34112a0e6e29 <a Module with map 0x17d1eda18319>#8#,filename=0x34112a0e6d11 <String[115]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chokidar/lib/fsevents-handler.js>)
   20: _load [module.js:409] [pc=0x350822306a2] (this=0x322dae0b6e99 <JS Function Module (SharedFunctionInfo 0x322dae024141)>#3#,request=0x322dae078ac1 <String[22]: ./lib/fsevents-handler>,parent=0x34112a005201 <a Module with map 0x17d1eda18319>#12#,isMain=0x349ff6504299 <false>)
   21: require [module.js:468] [pc=0x3508223e573] (this=0x34112a005201 <a Module with map 0x17d1eda18319>#12#,path=0x322dae078ac1 <String[22]: ./lib/fsevents-handler>)
   22: require(aka require) [internal/module.js:20] [pc=0x3508223e2a6] (this=0x349ff6504189 <undefined>,path=0x322dae078ac1 <String[22]: ./lib/fsevents-handler>)
   23: /* anonymous */ [/Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chokidar/index.js:13] [pc=0x3508224d66c] (this=0x34112a005491 <an Object with map 0x1bd817207b71>#13#,exports=0x34112a005491 <an Object with map 0x1bd817207b71>#13#,require=0x34112a005291 <JS Function require (SharedFunctionInfo 0x322dae054851)>#14#,module=0x34112a005201 <a Module with map 0x17d1eda18319>#12#,__filename=0x34112a005411 <String[100]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chokidar/index.js>,__dirname=0x34112a0053e9 <String[91]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chokidar>)
   24: _compile [module.js:541] [pc=0x3508223da90] (this=0x34112a005201 <a Module with map 0x17d1eda18319>#12#,content=0x34112a00d7c9 <Very long string[16671]>#15#,filename=0x34112a005411 <String[100]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chokidar/index.js>)
   25: .js [module.js:550] [pc=0x3508223658b] (this=0x322dae0b6ee1 <an Object with map 0x17d1eda17d41>#1#,module=0x34112a005201 <a Module with map 0x17d1eda18319>#12#,filename=0x34112a005411 <String[100]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chokidar/index.js>)
   26: load [module.js:458] [pc=0x35082234f92] (this=0x34112a005201 <a Module with map 0x17d1eda18319>#12#,filename=0x34112a005411 <String[100]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chokidar/index.js>)
   27: tryModuleLoad(aka tryModuleLoad) [module.js:417] [pc=0x35082234abd] (this=0x349ff6504189 <undefined>,module=0x34112a005201 <a Module with map 0x17d1eda18319>#12#,filename=0x34112a005411 <String[100]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chokidar/index.js>)
   28: _load [module.js:409] [pc=0x350822306a2] (this=0x322dae0b6e99 <JS Function Module (SharedFunctionInfo 0x322dae024141)>#3#,request=0x322dae0592b9 <String[8]: chokidar>,parent=0x322dae0b6fa9 <a Module with map 0x17d1eda18319>#16#,isMain=0x349ff6504299 <false>)
   29: require [module.js:468] [pc=0x3508223e573] (this=0x322dae0b6fa9 <a Module with map 0x17d1eda18319>#16#,path=0x322dae0592b9 <String[8]: chokidar>)
   30: require(aka require) [internal/module.js:20] [pc=0x3508223e2a6] (this=0x349ff6504189 <undefined>,path=0x322dae0592b9 <String[8]: chokidar>)
   31: /* anonymous */ [/Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/dist/lib/chimp.js:14] [pc=0x350822458a1] (this=0x322dae0b72d1 <an Object with map 0x1bd817207b71>#17#,exports=0x322dae0b72d1 <an Object with map 0x1bd817207b71>#17#,require=0x322dae0b7039 <JS Function require (SharedFunctionInfo 0x322dae054851)>#18#,module=0x322dae0b6fa9 <a Module with map 0x17d1eda18319>#16#,__filename=0x322dae0b7249 <String[106]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/dist/lib/chimp.js>,__dirname=0x322dae0b7221 <String[97]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/dist/lib>)
   32: _compile [module.js:541] [pc=0x3508223da90] (this=0x322dae0b6fa9 <a Module with map 0x17d1eda18319>#16#,content=0x322dae0badb9 <Very long string[14900]>#19#,filename=0x322dae0b7249 <String[106]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/dist/lib/chimp.js>)
   33: .js [module.js:550] [pc=0x3508223658b] (this=0x322dae0b6ee1 <an Object with map 0x17d1eda17d41>#1#,module=0x322dae0b6fa9 <a Module with map 0x17d1eda18319>#16#,filename=0x322dae0b7249 <String[106]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/dist/lib/chimp.js>)
   34: load [module.js:458] [pc=0x35082234f92] (this=0x322dae0b6fa9 <a Module with map 0x17d1eda18319>#16#,filename=0x322dae0b7249 <String[106]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/dist/lib/chimp.js>)
   35: tryModuleLoad(aka tryModuleLoad) [module.js:417] [pc=0x35082234abd] (this=0x349ff6504189 <undefined>,module=0x322dae0b6fa9 <a Module with map 0x17d1eda18319>#16#,filename=0x322dae0b7249 <String[106]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/dist/lib/chimp.js>)
   36: _load [module.js:409] [pc=0x350822306a2] (this=0x322dae0b6e99 <JS Function Module (SharedFunctionInfo 0x322dae024141)>#3#,request=0x322dae057d49 <String[15]: ../lib/chimp.js>,parent=0x322dae0be829 <a Module with map 0x17d1eda18319>#20#,isMain=0x349ff6504299 <false>)
   37: require [module.js:468] [pc=0x3508223e573] (this=0x322dae0be829 <a Module with map 0x17d1eda18319>#20#,path=0x322dae057d49 <String[15]: ../lib/chimp.js>)
   38: require(aka require) [internal/module.js:20] [pc=0x3508223e2a6] (this=0x349ff6504189 <undefined>,path=0x322dae057d49 <String[15]: ../lib/chimp.js>)
   39: /* anonymous */ [/Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/dist/bin/chimp.js:4] [pc=0x350822442a9] (this=0x322dae0bea51 <an Object with map 0x1bd817207b71>#21#,exports=0x322dae0bea51 <an Object with map 0x1bd817207b71>#21#,require=0x322dae0be8b9 <JS Function require (SharedFunctionInfo 0x322dae054851)>#22#,module=0x322dae0be829 <a Module with map 0x17d1eda18319>#20#,__filename=0x322dae0be9c9 <String[106]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/dist/bin/chimp.js>,__dirname=0x322dae0be9a1 <String[97]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/dist/bin>)
   40: _compile [module.js:541] [pc=0x3508223da90] (this=0x322dae0be829 <a Module with map 0x17d1eda18319>#20#,content=0x322dae0bf239 <Very long string[1845]>#23#,filename=0x322dae0be9c9 <String[106]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/dist/bin/chimp.js>)
   41: .js [module.js:550] [pc=0x3508223658b] (this=0x322dae0b6ee1 <an Object with map 0x17d1eda17d41>#1#,module=0x322dae0be829 <a Module with map 0x17d1eda18319>#20#,filename=0x322dae0be9c9 <String[106]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/dist/bin/chimp.js>)
   42: load [module.js:458] [pc=0x35082234f92] (this=0x322dae0be829 <a Module with map 0x17d1eda18319>#20#,filename=0x322dae0be9c9 <String[106]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/dist/bin/chimp.js>)
   43: tryModuleLoad(aka tryModuleLoad) [module.js:417] [pc=0x35082234abd] (this=0x349ff6504189 <undefined>,module=0x322dae0be829 <a Module with map 0x17d1eda18319>#20#,filename=0x322dae0be9c9 <String[106]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/dist/bin/chimp.js>)
   44: _load [module.js:409] [pc=0x350822306a2] (this=0x322dae0b6e99 <JS Function Module (SharedFunctionInfo 0x322dae024141)>#3#,request=0x322dae0542d9 <String[17]: ../dist/bin/chimp>,parent=0x322dae0bf9e1 <a Module with map 0x17d1eda18319>#24#,isMain=0x349ff6504299 <false>)
   45: require [module.js:468] [pc=0x3508223e573] (this=0x322dae0bf9e1 <a Module with map 0x17d1eda18319>#24#,path=0x322dae0542d9 <String[17]: ../dist/bin/chimp>)
   46: require(aka require) [internal/module.js:20] [pc=0x3508223e2a6] (this=0x349ff6504189 <undefined>,path=0x322dae0542d9 <String[17]: ../dist/bin/chimp>)
   47: /* anonymous */ [/Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/bin/chimp.js:3] [pc=0x3508223dd5b] (this=0x322dae0bfba9 <an Object with map 0x1bd817207b71>#25#,exports=0x322dae0bfba9 <an Object with map 0x1bd817207b71>#25#,require=0x322dae0bfa71 <JS Function require (SharedFunctionInfo 0x322dae054851)>#26#,module=0x322dae0bf9e1 <a Module with map 0x17d1eda18319>#24#,__filename=0x322dae0bfb29 <String[101]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/bin/chimp.js>,__dirname=0x322dae0bfb01 <String[92]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/bin>)
   48: _compile [module.js:541] [pc=0x3508223da90] (this=0x322dae0bf9e1 <a Module with map 0x17d1eda18319>#24#,content=0x322dae0bfc81 <String[32]\: \n\nrequire('../dist/bin/chimp');\n>,filename=0x322dae0bfb29 <String[101]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/bin/chimp.js>)
   49: .js [module.js:550] [pc=0x3508223658b] (this=0x322dae0b6ee1 <an Object with map 0x17d1eda17d41>#1#,module=0x322dae0bf9e1 <a Module with map 0x17d1eda18319>#24#,filename=0x322dae0bfb29 <String[101]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/bin/chimp.js>)
   50: load [module.js:458] [pc=0x35082234f92] (this=0x322dae0bf9e1 <a Module with map 0x17d1eda18319>#24#,filename=0x322dae0bfb29 <String[101]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/bin/chimp.js>)
   51: tryModuleLoad(aka tryModuleLoad) [module.js:417] [pc=0x35082234abd] (this=0x349ff6504189 <undefined>,module=0x322dae0bf9e1 <a Module with map 0x17d1eda18319>#24#,filename=0x322dae0bfb29 <String[101]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/bin/chimp.js>)
   52: _load [module.js:409] [pc=0x350822306a2] (this=0x322dae0b6e99 <JS Function Module (SharedFunctionInfo 0x322dae024141)>#3#,request=0x322dae0bfd19 <String[93]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/.bin/chimp>,parent=0x349ff6504101 <null>,isMain=0x349ff6504231 <true>)
   53: runMain [module.js:575] [pc=0x3508223016a] (this=0x322dae0b6e99 <JS Function Module (SharedFunctionInfo 0x322dae024141)>#3#)
   54: startup(aka startup) [node.js:160] [pc=0x350821408c9] (this=0x349ff6504189 <undefined>)
   55: /* anonymous */(aka /* anonymous */) [node.js:456] [pc=0x3508213e523] (this=0x349ff6504101 <null>,process=0x349ff65e0e51 <a process with map 0x1bd8172115c9>#27#)
=====================


==== C stack trace ===============================

 1: v8::Template::Set(v8::Local<v8::Name>, v8::Local<v8::Data>, v8::PropertyAttribute)
 2: fse::FSEvents::Initialize(v8::Local<v8::Object>)
 3: node::DLOpen(v8::FunctionCallbackInfo<v8::Value> const&)
 4: v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&))
 5: v8::internal::MaybeHandle<v8::internal::Object> v8::internal::(anonymous namespace)::HandleApiCallHelper<false>(v8::internal::Isolate*, v8::internal::(anonymous namespace)::BuiltinArguments<(v8::internal::BuiltinExtraArguments)1>)
 6: v8::internal::Builtin_HandleApiCall(int, v8::internal::Object**, v8::internal::Isolate*)
 7: 0x3508210961b
 8: 0x3508226f4c4
(node) v8::ObjectTemplate::Set() with non-primitive values is deprecated
(node) and will stop working in the next major release.

==== JS stack trace =========================================

Security context: 0x349ff65c9e59 <JS Object>#0#
    1: .node [module.js:568] [pc=0x3508226f4c4] (this=0x322dae0b6ee1 <an Object with map 0x17d1eda17d41>#1#,module=0x34112a0f8b69 <a Module with map 0x17d1eda18319>#2#,filename=0x34112a0f8ad9 <String[114]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/fsevents/build/Release/fse.node>)
    2: load [module.js:458] [pc=0x35082234f92] (this=0x34112a0f8b69 <a Module with map 0x17d1eda18319>#2#,filename=0x34112a0f8ad9 <String[114]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/fsevents/build/Release/fse.node>)
    3: tryModuleLoad(aka tryModuleLoad) [module.js:417] [pc=0x35082234abd] (this=0x349ff6504189 <undefined>,module=0x34112a0f8b69 <a Module with map 0x17d1eda18319>#2#,filename=0x34112a0f8ad9 <String[114]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/fsevents/build/Release/fse.node>)
    4: _load [module.js:409] [pc=0x350822306a2] (this=0x322dae0b6e99 <JS Function Module (SharedFunctionInfo 0x322dae024141)>#3#,request=0x2a8c315690c9 <String[19]: ./build/Release/fse>,parent=0x34112a0f2fd1 <a Module with map 0x17d1eda18319>#4#,isMain=0x349ff6504299 <false>)
    5: require [module.js:468] [pc=0x3508223e573] (this=0x34112a0f2fd1 <a Module with map 0x17d1eda18319>#4#,path=0x2a8c315690c9 <String[19]: ./build/Release/fse>)
    6: require(aka require) [internal/module.js:20] [pc=0x3508223e2a6] (this=0x349ff6504189 <undefined>,path=0x2a8c315690c9 <String[19]: ./build/Release/fse>)
    7: /* anonymous */ [/Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/fsevents/fsevents.js:9] [pc=0x3508226ecbf] (this=0x34112a0f3021 <an Object with map 0x1bd817207b71>#5#,exports=0x34112a0f3021 <an Object with map 0x1bd817207b71>#5#,require=0x34112a0f7419 <JS Function require (SharedFunctionInfo 0x322dae054851)>#6#,module=0x34112a0f2fd1 <a Module with map 0x17d1eda18319>#4#,__filename=0x34112a0f2f51 <String[103]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/fsevents/fsevents.js>,__dirname=0x34112a0f73b1 <String[91]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/fsevents>)
    8: _compile [module.js:541] [pc=0x3508223da90] (this=0x34112a0f2fd1 <a Module with map 0x17d1eda18319>#4#,content=0x34112a0f3e79 <Very long string[3059]>#7#,filename=0x34112a0f2f51 <String[103]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/fsevents/fsevents.js>)
    9: .js [module.js:550] [pc=0x3508223658b] (this=0x322dae0b6ee1 <an Object with map 0x17d1eda17d41>#1#,module=0x34112a0f2fd1 <a Module with map 0x17d1eda18319>#4#,filename=0x34112a0f2f51 <String[103]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/fsevents/fsevents.js>)
   10: load [module.js:458] [pc=0x35082234f92] (this=0x34112a0f2fd1 <a Module with map 0x17d1eda18319>#4#,filename=0x34112a0f2f51 <String[103]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/fsevents/fsevents.js>)
   11: tryModuleLoad(aka tryModuleLoad) [module.js:417] [pc=0x35082234abd] (this=0x349ff6504189 <undefined>,module=0x34112a0f2fd1 <a Module with map 0x17d1eda18319>#4#,filename=0x34112a0f2f51 <String[103]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/fsevents/fsevents.js>)
   12: _load [module.js:409] [pc=0x350822306a2] (this=0x322dae0b6e99 <JS Function Module (SharedFunctionInfo 0x322dae024141)>#3#,request=0x322dae078341 <String[8]: fsevents>,parent=0x34112a0e6e29 <a Module with map 0x17d1eda18319>#8#,isMain=0x349ff6504299 <false>)
   13: require [module.js:468] [pc=0x3508223e573] (this=0x34112a0e6e29 <a Module with map 0x17d1eda18319>#8#,path=0x322dae078341 <String[8]: fsevents>)
   14: require(aka require) [internal/module.js:20] [pc=0x3508223e2a6] (this=0x349ff6504189 <undefined>,path=0x322dae078341 <String[8]: fsevents>)
   15: /* anonymous */ [/Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chokidar/lib/fsevents-handler.js:7] [pc=0x3508226e36a] (this=0x34112a0e6e79 <an Object with map 0x1bd817207b71>#9#,exports=0x34112a0e6e79 <an Object with map 0x1bd817207b71>#9#,require=0x34112a0edfb9 <JS Function require (SharedFunctionInfo 0x322dae054851)>#10#,module=0x34112a0e6e29 <a Module with map 0x17d1eda18319>#8#,__filename=0x34112a0e6d11 <String[115]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chokidar/lib/fsevents-handler.js>,__dirname=0x34112a0edf51 <String[95]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chokidar/lib>)
   16: _compile [module.js:541] [pc=0x3508223da90] (this=0x34112a0e6e29 <a Module with map 0x17d1eda18319>#8#,content=0x34112a0e7bd1 <Very long string[12062]>#11#,filename=0x34112a0e6d11 <String[115]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chokidar/lib/fsevents-handler.js>)
   17: .js [module.js:550] [pc=0x3508223658b] (this=0x322dae0b6ee1 <an Object with map 0x17d1eda17d41>#1#,module=0x34112a0e6e29 <a Module with map 0x17d1eda18319>#8#,filename=0x34112a0e6d11 <String[115]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chokidar/lib/fsevents-handler.js>)
   18: load [module.js:458] [pc=0x35082234f92] (this=0x34112a0e6e29 <a Module with map 0x17d1eda18319>#8#,filename=0x34112a0e6d11 <String[115]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chokidar/lib/fsevents-handler.js>)
   19: tryModuleLoad(aka tryModuleLoad) [module.js:417] [pc=0x35082234abd] (this=0x349ff6504189 <undefined>,module=0x34112a0e6e29 <a Module with map 0x17d1eda18319>#8#,filename=0x34112a0e6d11 <String[115]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chokidar/lib/fsevents-handler.js>)
   20: _load [module.js:409] [pc=0x350822306a2] (this=0x322dae0b6e99 <JS Function Module (SharedFunctionInfo 0x322dae024141)>#3#,request=0x322dae078ac1 <String[22]: ./lib/fsevents-handler>,parent=0x34112a005201 <a Module with map 0x17d1eda18319>#12#,isMain=0x349ff6504299 <false>)
   21: require [module.js:468] [pc=0x3508223e573] (this=0x34112a005201 <a Module with map 0x17d1eda18319>#12#,path=0x322dae078ac1 <String[22]: ./lib/fsevents-handler>)
   22: require(aka require) [internal/module.js:20] [pc=0x3508223e2a6] (this=0x349ff6504189 <undefined>,path=0x322dae078ac1 <String[22]: ./lib/fsevents-handler>)
   23: /* anonymous */ [/Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chokidar/index.js:13] [pc=0x3508224d66c] (this=0x34112a005491 <an Object with map 0x1bd817207b71>#13#,exports=0x34112a005491 <an Object with map 0x1bd817207b71>#13#,require=0x34112a005291 <JS Function require (SharedFunctionInfo 0x322dae054851)>#14#,module=0x34112a005201 <a Module with map 0x17d1eda18319>#12#,__filename=0x34112a005411 <String[100]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chokidar/index.js>,__dirname=0x34112a0053e9 <String[91]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chokidar>)
   24: _compile [module.js:541] [pc=0x3508223da90] (this=0x34112a005201 <a Module with map 0x17d1eda18319>#12#,content=0x34112a00d7c9 <Very long string[16671]>#15#,filename=0x34112a005411 <String[100]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chokidar/index.js>)
   25: .js [module.js:550] [pc=0x3508223658b] (this=0x322dae0b6ee1 <an Object with map 0x17d1eda17d41>#1#,module=0x34112a005201 <a Module with map 0x17d1eda18319>#12#,filename=0x34112a005411 <String[100]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chokidar/index.js>)
   26: load [module.js:458] [pc=0x35082234f92] (this=0x34112a005201 <a Module with map 0x17d1eda18319>#12#,filename=0x34112a005411 <String[100]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chokidar/index.js>)
   27: tryModuleLoad(aka tryModuleLoad) [module.js:417] [pc=0x35082234abd] (this=0x349ff6504189 <undefined>,module=0x34112a005201 <a Module with map 0x17d1eda18319>#12#,filename=0x34112a005411 <String[100]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chokidar/index.js>)
   28: _load [module.js:409] [pc=0x350822306a2] (this=0x322dae0b6e99 <JS Function Module (SharedFunctionInfo 0x322dae024141)>#3#,request=0x322dae0592b9 <String[8]: chokidar>,parent=0x322dae0b6fa9 <a Module with map 0x17d1eda18319>#16#,isMain=0x349ff6504299 <false>)
   29: require [module.js:468] [pc=0x3508223e573] (this=0x322dae0b6fa9 <a Module with map 0x17d1eda18319>#16#,path=0x322dae0592b9 <String[8]: chokidar>)
   30: require(aka require) [internal/module.js:20] [pc=0x3508223e2a6] (this=0x349ff6504189 <undefined>,path=0x322dae0592b9 <String[8]: chokidar>)
   31: /* anonymous */ [/Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/dist/lib/chimp.js:14] [pc=0x350822458a1] (this=0x322dae0b72d1 <an Object with map 0x1bd817207b71>#17#,exports=0x322dae0b72d1 <an Object with map 0x1bd817207b71>#17#,require=0x322dae0b7039 <JS Function require (SharedFunctionInfo 0x322dae054851)>#18#,module=0x322dae0b6fa9 <a Module with map 0x17d1eda18319>#16#,__filename=0x322dae0b7249 <String[106]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/dist/lib/chimp.js>,__dirname=0x322dae0b7221 <String[97]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/dist/lib>)
   32: _compile [module.js:541] [pc=0x3508223da90] (this=0x322dae0b6fa9 <a Module with map 0x17d1eda18319>#16#,content=0x322dae0badb9 <Very long string[14900]>#19#,filename=0x322dae0b7249 <String[106]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/dist/lib/chimp.js>)
   33: .js [module.js:550] [pc=0x3508223658b] (this=0x322dae0b6ee1 <an Object with map 0x17d1eda17d41>#1#,module=0x322dae0b6fa9 <a Module with map 0x17d1eda18319>#16#,filename=0x322dae0b7249 <String[106]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/dist/lib/chimp.js>)
   34: load [module.js:458] [pc=0x35082234f92] (this=0x322dae0b6fa9 <a Module with map 0x17d1eda18319>#16#,filename=0x322dae0b7249 <String[106]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/dist/lib/chimp.js>)
   35: tryModuleLoad(aka tryModuleLoad) [module.js:417] [pc=0x35082234abd] (this=0x349ff6504189 <undefined>,module=0x322dae0b6fa9 <a Module with map 0x17d1eda18319>#16#,filename=0x322dae0b7249 <String[106]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/dist/lib/chimp.js>)
   36: _load [module.js:409] [pc=0x350822306a2] (this=0x322dae0b6e99 <JS Function Module (SharedFunctionInfo 0x322dae024141)>#3#,request=0x322dae057d49 <String[15]: ../lib/chimp.js>,parent=0x322dae0be829 <a Module with map 0x17d1eda18319>#20#,isMain=0x349ff6504299 <false>)
   37: require [module.js:468] [pc=0x3508223e573] (this=0x322dae0be829 <a Module with map 0x17d1eda18319>#20#,path=0x322dae057d49 <String[15]: ../lib/chimp.js>)
   38: require(aka require) [internal/module.js:20] [pc=0x3508223e2a6] (this=0x349ff6504189 <undefined>,path=0x322dae057d49 <String[15]: ../lib/chimp.js>)
   39: /* anonymous */ [/Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/dist/bin/chimp.js:4] [pc=0x350822442a9] (this=0x322dae0bea51 <an Object with map 0x1bd817207b71>#21#,exports=0x322dae0bea51 <an Object with map 0x1bd817207b71>#21#,require=0x322dae0be8b9 <JS Function require (SharedFunctionInfo 0x322dae054851)>#22#,module=0x322dae0be829 <a Module with map 0x17d1eda18319>#20#,__filename=0x322dae0be9c9 <String[106]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/dist/bin/chimp.js>,__dirname=0x322dae0be9a1 <String[97]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/dist/bin>)
   40: _compile [module.js:541] [pc=0x3508223da90] (this=0x322dae0be829 <a Module with map 0x17d1eda18319>#20#,content=0x322dae0bf239 <Very long string[1845]>#23#,filename=0x322dae0be9c9 <String[106]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/dist/bin/chimp.js>)
   41: .js [module.js:550] [pc=0x3508223658b] (this=0x322dae0b6ee1 <an Object with map 0x17d1eda17d41>#1#,module=0x322dae0be829 <a Module with map 0x17d1eda18319>#20#,filename=0x322dae0be9c9 <String[106]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/dist/bin/chimp.js>)
   42: load [module.js:458] [pc=0x35082234f92] (this=0x322dae0be829 <a Module with map 0x17d1eda18319>#20#,filename=0x322dae0be9c9 <String[106]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/dist/bin/chimp.js>)
   43: tryModuleLoad(aka tryModuleLoad) [module.js:417] [pc=0x35082234abd] (this=0x349ff6504189 <undefined>,module=0x322dae0be829 <a Module with map 0x17d1eda18319>#20#,filename=0x322dae0be9c9 <String[106]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/dist/bin/chimp.js>)
   44: _load [module.js:409] [pc=0x350822306a2] (this=0x322dae0b6e99 <JS Function Module (SharedFunctionInfo 0x322dae024141)>#3#,request=0x322dae0542d9 <String[17]: ../dist/bin/chimp>,parent=0x322dae0bf9e1 <a Module with map 0x17d1eda18319>#24#,isMain=0x349ff6504299 <false>)
   45: require [module.js:468] [pc=0x3508223e573] (this=0x322dae0bf9e1 <a Module with map 0x17d1eda18319>#24#,path=0x322dae0542d9 <String[17]: ../dist/bin/chimp>)
   46: require(aka require) [internal/module.js:20] [pc=0x3508223e2a6] (this=0x349ff6504189 <undefined>,path=0x322dae0542d9 <String[17]: ../dist/bin/chimp>)
   47: /* anonymous */ [/Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/bin/chimp.js:3] [pc=0x3508223dd5b] (this=0x322dae0bfba9 <an Object with map 0x1bd817207b71>#25#,exports=0x322dae0bfba9 <an Object with map 0x1bd817207b71>#25#,require=0x322dae0bfa71 <JS Function require (SharedFunctionInfo 0x322dae054851)>#26#,module=0x322dae0bf9e1 <a Module with map 0x17d1eda18319>#24#,__filename=0x322dae0bfb29 <String[101]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/bin/chimp.js>,__dirname=0x322dae0bfb01 <String[92]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/bin>)
   48: _compile [module.js:541] [pc=0x3508223da90] (this=0x322dae0bf9e1 <a Module with map 0x17d1eda18319>#24#,content=0x322dae0bfc81 <String[32]\: \n\nrequire('../dist/bin/chimp');\n>,filename=0x322dae0bfb29 <String[101]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/bin/chimp.js>)
   49: .js [module.js:550] [pc=0x3508223658b] (this=0x322dae0b6ee1 <an Object with map 0x17d1eda17d41>#1#,module=0x322dae0bf9e1 <a Module with map 0x17d1eda18319>#24#,filename=0x322dae0bfb29 <String[101]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/bin/chimp.js>)
   50: load [module.js:458] [pc=0x35082234f92] (this=0x322dae0bf9e1 <a Module with map 0x17d1eda18319>#24#,filename=0x322dae0bfb29 <String[101]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/bin/chimp.js>)
   51: tryModuleLoad(aka tryModuleLoad) [module.js:417] [pc=0x35082234abd] (this=0x349ff6504189 <undefined>,module=0x322dae0bf9e1 <a Module with map 0x17d1eda18319>#24#,filename=0x322dae0bfb29 <String[101]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/chimp/bin/chimp.js>)
   52: _load [module.js:409] [pc=0x350822306a2] (this=0x322dae0b6e99 <JS Function Module (SharedFunctionInfo 0x322dae024141)>#3#,request=0x322dae0bfd19 <String[93]: /Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/.bin/chimp>,parent=0x349ff6504101 <null>,isMain=0x349ff6504231 <true>)
   53: runMain [module.js:575] [pc=0x3508223016a] (this=0x322dae0b6e99 <JS Function Module (SharedFunctionInfo 0x322dae024141)>#3#)
   54: startup(aka startup) [node.js:160] [pc=0x350821408c9] (this=0x349ff6504189 <undefined>)
   55: /* anonymous */(aka /* anonymous */) [node.js:456] [pc=0x3508213e523] (this=0x349ff6504101 <null>,process=0x349ff65e0e51 <a process with map 0x1bd8172115c9>#27#)
=====================


==== C stack trace ===============================

 1: v8::Template::Set(v8::Local<v8::Name>, v8::Local<v8::Data>, v8::PropertyAttribute)
 2: fse::FSEvents::Initialize(v8::Local<v8::Object>)
 3: node::DLOpen(v8::FunctionCallbackInfo<v8::Value> const&)
 4: v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&))
 5: v8::internal::MaybeHandle<v8::internal::Object> v8::internal::(anonymous namespace)::HandleApiCallHelper<false>(v8::internal::Isolate*, v8::internal::(anonymous namespace)::BuiltinArguments<(v8::internal::BuiltinExtraArguments)1>)
 6: v8::internal::Builtin_HandleApiCall(int, v8::internal::Object**, v8::internal::Isolate*)
 7: 0x3508210961b
 8: 0x3508226f4c4
[chimp] Watching features with tagged with @focus

[chimp] Running...
(node:15056) fs: re-evaluating native module sources is not supported. If you are using the graceful-fs module, please update it to a more recent version.

[chimp] domain scenarios...
/Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/babel-core/lib/transformation/file/logger.js:41
    throw new Constructor(this._buildMessage(msg));
    ^

ReferenceError: [BABEL] /Users/tomi/Github/3rdParty/automated-testing-best-practices/tests/step_definitions/domain/support/fixtures/_fixtures.js: Unknown option: base.Children. Check out http://babeljs.io/docs/usage/options/ for more info
    at Logger.error (/Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/babel-core/lib/transformation/file/logger.js:41:11)
    at OptionManager.mergeOptions (/Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/babel-core/lib/transformation/file/options/option-manager.js:235:20)
    at OptionManager.init (/Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/babel-core/lib/transformation/file/options/option-manager.js:360:12)
    at File.initOptions (/Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/babel-core/lib/transformation/file/index.js:223:65)
    at new File (/Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/babel-core/lib/transformation/file/index.js:140:24)
    at Pipeline.transform (/Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/babel-core/lib/transformation/pipeline.js:46:16)
    at Object.transformFileSync (/Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/babel-core/lib/api/node.js:144:10)
    at compile (/Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/babel-register/lib/node.js:129:20)
    at loader (/Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/babel-register/lib/node.js:158:14)
    at Object.require.extensions.(anonymous function) [as .js] (/Users/tomi/Github/3rdParty/automated-testing-best-practices/.scripts/node_modules/babel-register/lib/node.js:168:7)

Include information on how to include server specs

karma.conf.js excludes src/imports/**/server/**/*-spec.@(js|jsx) and commenting out that line leads to an error:

Uncaught Error: There is already a collection named 'accountHolders' at
[...]/src/.meteor/local/build/programs/web.browser/packages/mongo.js:312

I couldn't find any information in the docs on how to include the server-side tests. What's the best way?

Install issues on Windows

I followed the installation instructions but haven't been able to get the project running. I'm guessing this may be because I'm on Windows (8.1 Pro specifically) as there is a symlink warning in one of the messages?

I'm getting warnings and errors at each stage of the process as shown in the copies of the console messages below.

Apologies, I'm not really experienced enough with Git or NPM to work out the causes for all of this.

1) Cloning the repo with Git Bash:

$ git clone https://github.com/xolvio/automated-testing-best-practices.git
Cloning into 'automated-testing-best-practices'...
remote: Counting objects: 1362, done.
remote: Compressing objects: 100% (42/42), done.
remote: Total 1362 (delta 19), Receiving obrjects: eused  97%2 ( (132delta2/1 23 pack-reused 1318
Receiving objects: 100% (1362/1362), 826.90 KiB | 547.00 KiB/s, done.
Resolving deltas: 100% (652/652), done.
Checking connectivity... done.
error: unable to create file tests/step_definitions/critical/Then # should have # checks left in (her|his) checkbook.js (Invalid argument)
error: unable to create file tests/step_definitions/domain/Then # should have # checks left in (her|his) checkbook.js (Invalid argument)
fatal: unable to checkout working tree
warning: Clone succeeded, but checkout failed.
You can inspect what was checked out with 'git status'
and retry the checkout with 'git checkout -f HEAD'

2) npm install:

$ npm install
npm WARN excluding symbolic link lib\jasmine-core\spec -> ../../spec
npm WARN install Couldn't install optional dependency: Unsupported
npm WARN deprecated [email protected]: graceful-fs version 3 and before will fail on newer node releases. Please update to graceful-fs@^4.0.0 as soon as possible.
npm WARN excluding symbolic link lib\jasmine-core\spec -> ../../spec

> [email protected] install C:\websites\automated-testing-best-practices\node_modules\phantomjs
> node install.js

PhantomJS not found on PATH
Download already available at C:\Users\Tom\AppData\Local\Temp\phantomjs\phantomjs-1.9.8-windows.zip
Verified checksum of previously downloaded file
Extracting zip contents
Removing C:\websites\automated-testing-best-practices\node_modules\phantomjs\lib\phantom
Copying extracted folder C:\Users\Tom\AppData\Local\Temp\phantomjs\phantomjs-1.9.8-windows.zip-extract-1460203412973\phantomjs-1.9.8-windows -> C:\websites\automated-testing-best-practices\node_modules\phantomjs\lib\phantom
Writing location.js file
Done. Phantomjs binary available at C:\websites\automated-testing-best-practices\node_modules\phantomjs\lib\phantom\phantomjs.exe

> undefined install C:\websites\automated-testing-best-practices
> cd .scripts && npm install && cd ../src && npm install

npm WARN install Couldn't install optional dependency: Unsupported
npm WARN deprecated [email protected]: Jade has been renamed to pug, please install the latest version of pug instead of jade
npm WARN deprecated [email protected]: graceful-fs version 3 and before will fail on newer node releases. Please update to graceful-fs@^4.0.0 as soon as possible.
npm WARN deprecated [email protected]: graceful-fs version 3 and before will fail on newer node releases. Please update to graceful-fs@^4.0.0 as soon as possible.

> [email protected] install C:\websites\automated-testing-best-practices\.scripts\node_modules\fibers
> node build.js || nodejs build.js

`win32-x64-v8-4.6` exists; testing
Binary is fine; exiting
C:\websites\automated-testing-best-practices\.scripts
└─┬ [email protected]
  ├── [email protected]
  ├─┬ [email protected]
  │ ├─┬ [email protected]
  │ │ ├── [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ ├── [email protected]
  │ │ │ ├── [email protected]
  │ │ │ ├─┬ [email protected]
  │ │ │ │ └── [email protected]
  │ │ │ ├── [email protected]
  │ │ │ └── [email protected]
  │ │ ├── [email protected]
  │ │ ├── [email protected]
  │ │ └─┬ [email protected]
  │ │   └─┬ [email protected]
  │ │     └── [email protected]
  │ ├─┬ [email protected]
  │ │ ├── [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ └── [email protected]
  │ │ ├── [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ ├── [email protected]
  │ │ ├── [email protected]
  │ │ └─┬ [email protected]
  │ │   └── [email protected]
  │ ├─┬ [email protected]
  │ │ ├── [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ ├─┬ [email protected]
  │ │ └─┬ [email protected]
  │ │   ├── [email protected]
  │ │   └── [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ └── [email protected]
  ├─┬ [email protected]
  │ └── [email protected]
  ├─┬ [email protected]
  │ ├── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ └── [email protected]
  ├─┬ [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ └── [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ └── [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ └── [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ └── [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ └── [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ ├─┬ [email protected]
  │ │ │ │ └── [email protected]
  │ │ │ └── [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ └── [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ └── [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ ├── [email protected]
  │ │ └─┬ [email protected]
  │ │   ├── [email protected]
  │ │   ├── [email protected]
  │ │   └─┬ [email protected]
  │ │     └── [email protected]
  │ └─┬ [email protected]
  │   ├─┬ [email protected]
  │   │ └── [email protected]
  │   └── [email protected]
  ├─┬ [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ └── [email protected]
  │ │ └── [email protected]
  │ └─┬ [email protected]
  │   ├─┬ [email protected]
  │   │ ├─┬ [email protected]
  │   │ │ └── [email protected]
  │   │ └── [email protected]
  │   └─┬ [email protected]
  │     ├─┬ [email protected]
  │     │ ├─┬ [email protected]
  │     │ │ └── [email protected]
  │     │ └── [email protected]
  │     ├─┬ [email protected]
  │     │ └── [email protected]
  │     └── [email protected]
  ├─┬ [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├── [email protected]
  │ ├─┬ [email protected]
  │ │ ├── [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ └─┬ [email protected]
  │   └─┬ [email protected]
  │     └── [email protected]
  ├─┬ [email protected]
  │ └── [email protected]
  ├── [email protected]
  ├─┬ [email protected]
  │ ├── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ └── [email protected]
  ├── [email protected]
  ├── [email protected]
  ├── [email protected]
  ├─┬ [email protected]
  │ ├─┬ [email protected]
  │ │ └─┬ [email protected]
  │ │   ├─┬ [email protected]
  │ │   │ └── [email protected]
  │ │   ├── [email protected]
  │ │   ├─┬ [email protected]
  │ │   │ ├─┬ [email protected]
  │ │   │ │ └─┬ [email protected]
  │ │   │ │   ├── [email protected]
  │ │   │ │   ├── [email protected]
  │ │   │ │   ├── [email protected]
  │ │   │ │   └── [email protected]
  │ │   │ ├── [email protected]
  │ │   │ └── [email protected]
  │ │   ├─┬ [email protected]
  │ │   │ └── [email protected]
  │ │   ├── [email protected]
  │ │   ├── [email protected]
  │ │   ├── [email protected]
  │ │   ├── [email protected]
  │ │   ├─┬ [email protected]
  │ │   │ └── [email protected]
  │ │   ├── [email protected]
  │ │   ├─┬ [email protected]
  │ │   │ ├─┬ [email protected]
  │ │   │ │ └── [email protected]
  │ │   │ └── [email protected]
  │ │   ├─┬ [email protected]
  │ │   │ ├─┬ [email protected]
  │ │   │ │ ├── [email protected]
  │ │   │ │ └── [email protected]
  │ │   │ ├── [email protected]
  │ │   │ └── [email protected]
  │ │   └─┬ [email protected]
  │ │     ├── [email protected]
  │ │     └── [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├── [email protected]
  │ └─┬ [email protected]
  │   ├─┬ [email protected]
  │   │ ├── [email protected]
  │   │ └── [email protected]
  │   └─┬ [email protected]
  │     ├── [email protected]
  │     ├── [email protected]
  │     └── [email protected]
  ├── [email protected]
  ├─┬ [email protected]
  │ └── [email protected]
  ├─┬ [email protected]  (git://github.com/xolvio/cucumber-js.git#6ba5fd3786e49b1f76c115286113d56d53f36c48)
  │ ├── [email protected]
  │ ├─┬ [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ └── [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├── [email protected]
  │ ├─┬ [email protected]
  │ │ ├── [email protected]
  │ │ └─┬ [email protected]
  │ │   ├── [email protected]
  │ │   └── [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ ├─┬ [email protected]
  │ │ └─┬ [email protected]
  │ │   └── [email protected]
  │ └── [email protected]
  ├── [email protected]
  ├── [email protected]
  ├── [email protected]
  ├── [email protected]
  ├─┬ [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ └─┬ [email protected]
  │   └── [email protected]
  ├─┬ [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├── [email protected]
  │ └── [email protected]
  ├─┬ [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ └─┬ [email protected]
  │ │   ├── [email protected]
  │ │   └── [email protected]
  │ ├── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ ├─┬ [email protected]
  │ │ ├── [email protected]
  │ │ └── [email protected]
  │ ├── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ ├─┬ [email protected]
  │ │ ├── [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ ├── [email protected]
  │ │ │ └─┬ [email protected]
  │ │ │   └── [email protected]
  │ │ └── [email protected]
  │ ├── [email protected]
  │ └── [email protected]
  ├── [email protected]
  ├── [email protected]
  ├─┬ [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ ├─┬ [email protected]
  │ │ ├── [email protected]
  │ │ └── [email protected]
  │ ├── [email protected]
  │ ├─┬ [email protected]
  │ │ ├── [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ └── [email protected]
  ├── [email protected]
  ├── [email protected]
  ├─┬ [email protected]
  │ ├── [email protected]
  │ ├─┬ [email protected]
  │ │ └─┬ [email protected]
  │ │   ├── [email protected]
  │ │   ├── [email protected]
  │ │   └── [email protected]
  │ ├── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ ├── [email protected]
  │ │ │ ├─┬ [email protected]
  │ │ │ │ └── [email protected]
  │ │ │ ├── [email protected]
  │ │ │ └── [email protected]
  │ │ └─┬ [email protected]
  │ │   └── [email protected]
  │ ├─┬ [email protected]
  │ │ ├── [email protected]
  │ │ ├── [email protected]
  │ │ ├── [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ ├── [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ ├── [email protected]
  │ │ │ ├── [email protected]
  │ │ │ └── [email protected]
  │ │ └─┬ [email protected]
  │ │   ├── [email protected]
  │ │   ├─┬ [email protected]
  │ │   │ └── [email protected]
  │ │   ├── [email protected]
  │ │   ├── [email protected]
  │ │   ├── [email protected]
  │ │   └── [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ └── [email protected]
  ├─┬ [email protected]
  │ └─┬ [email protected]
  │   ├── [email protected]
  │   └── [email protected]
  ├── [email protected]
  ├─┬ [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ ├─┬ [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ ├── [email protected]
  │ │ ├── [email protected]
  │ │ ├── [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ └── [email protected]
  │ │ ├── [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ ├── [email protected]
  │ │ │ └─┬ [email protected]
  │ │ │   └── [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ ├── [email protected]
  │ │ │ ├── [email protected]
  │ │ │ ├── [email protected]
  │ │ │ └── [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ ├── [email protected]
  │ │ │ ├── [email protected]
  │ │ │ └── [email protected]
  │ │ ├── [email protected]
  │ │ ├── [email protected]
  │ │ └── [email protected]
  │ ├─┬ [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ ├── [email protected]
  │ │ │ └─┬ [email protected]
  │ │ │   └── [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ └── [email protected]
  │ │ ├── [email protected]
  │ │ ├─┬ [email protected]
  │ │ │ ├── [email protected]
  │ │ │ └── [email protected]
  │ │ └── [email protected]
  │ ├── [email protected]
  │ └─┬ [email protected]
  │   └─┬ [email protected]
  │     └── [email protected]
  ├── [email protected]
  ├─┬ [email protected]
  │ ├── [email protected]
  │ ├── [email protected]
  │ ├─┬ [email protected]
  │ │ └─┬ [email protected]
  │ │   └── [email protected]
  │ └─┬ [email protected]
  │   ├── [email protected]
  │   ├── [email protected]
  │   ├── [email protected]
  │   ├─┬ [email protected]
  │   │ └── [email protected]
  │   ├── [email protected]
  │   ├── [email protected]
  │   ├── [email protected]
  │   ├─┬ [email protected]
  │   │ ├── [email protected]
  │   │ └── [email protected]
  │   ├─┬ [email protected]
  │   │ └── [email protected]
  │   ├── [email protected]
  │   └── [email protected]
  ├─┬ [email protected]
  │ └── [email protected]
  └─┬ [email protected]
    ├── [email protected]
    ├─┬ [email protected]
    │ ├─┬ [email protected]
    │ │ ├── [email protected]
    │ │ ├── [email protected]
    │ │ ├── [email protected]
    │ │ ├── [email protected]
    │ │ ├─┬ [email protected]
    │ │ │ ├── [email protected]
    │ │ │ └── [email protected]
    │ │ └─┬ [email protected]
    │ │   ├─┬ [email protected]
    │ │   │ ├── [email protected]
    │ │   │ └── [email protected]
    │ │   └── [email protected]
    │ ├── [email protected]
    │ ├── [email protected]
    │ ├─┬ [email protected]
    │ │ └─┬ [email protected]
    │ │   ├── [email protected]
    │ │   ├─┬ [email protected]
    │ │   │ ├── [email protected]
    │ │   │ ├── [email protected]
    │ │   │ └── [email protected]
    │ │   └── [email protected]
    │ ├── [email protected]
    │ ├── [email protected]
    │ ├── [email protected]
    │ ├─┬ [email protected]
    │ │ ├── [email protected]
    │ │ ├── [email protected]
    │ │ ├── [email protected]
    │ │ ├─┬ [email protected]
    │ │ │ ├── [email protected]
    │ │ │ └─┬ [email protected]
    │ │ │   └── [email protected]
    │ │ ├── [email protected]
    │ │ └── [email protected]
    │ ├── [email protected]
    │ ├─┬ [email protected]
    │ │ ├── [email protected]
    │ │ └── [email protected]
    │ ├── [email protected]
    │ ├─┬ [email protected]
    │ │ ├── [email protected]
    │ │ ├── [email protected]
    │ │ ├── [email protected]
    │ │ ├─┬ [email protected]
    │ │ │ └── [email protected]
    │ │ ├── [email protected]
    │ │ ├─┬ [email protected]
    │ │ │ └── [email protected]
    │ │ ├─┬ [email protected]
    │ │ │ ├── [email protected]
    │ │ │ ├── [email protected]
    │ │ │ ├── [email protected]
    │ │ │ └── [email protected]
    │ │ ├─┬ [email protected]
    │ │ │ ├── [email protected]
    │ │ │ └── [email protected]
    │ │ ├── [email protected]
    │ │ ├── [email protected]
    │ │ └── [email protected]
    │ ├── [email protected]
    │ ├── [email protected]
    │ ├─┬ [email protected]
    │ │ ├── [email protected]
    │ │ └── [email protected]
    │ └── [email protected]
    └── [email protected]

C:\websites\automated-testing-best-practices\src
├─┬ [email protected]
│ ├─┬ [email protected]
│ │ ├─┬ [email protected]
│ │ │ ├── [email protected]
│ │ │ ├── [email protected]
│ │ │ └─┬ [email protected]
│ │ │   └── [email protected]
│ │ └── [email protected]
│ └─┬ [email protected]
│   ├── [email protected]
│   ├─┬ [email protected]
│   │ └── [email protected]
│   ├─┬ [email protected]
│   │ └── [email protected]
│   ├── [email protected]
│   └── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
└── [email protected]

C:\websites\automated-testing-best-practices
├─┬ [email protected]
│ ├─┬ [email protected]
│ │ ├─┬ [email protected]
│ │ │ ├── [email protected]
│ │ │ ├── [email protected]
│ │ │ ├─┬ [email protected]
│ │ │ │ └── [email protected]
│ │ │ ├── [email protected]
│ │ │ └── [email protected]
│ │ ├── [email protected]
│ │ ├── [email protected]
│ │ └─┬ [email protected]
│ │   └─┬ [email protected]
│ │     └── [email protected]
│ ├─┬ [email protected]
│ │ ├─┬ [email protected]
│ │ │ ├── [email protected]
│ │ │ └── [email protected]
│ │ ├── [email protected]
│ │ └── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├─┬ [email protected]
│ │ └── [email protected]
│ ├── [email protected]
│ ├─┬ [email protected]
│ │ ├── [email protected]
│ │ └─┬ [email protected]
│ │   └── [email protected]
│ ├─┬ [email protected]
│ │ └── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├─┬ [email protected]
│ │ └── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├─┬ [email protected]
│ │ └─┬ [email protected]
│ │   ├── [email protected]
│ │   └── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ └── [email protected]
├─┬ [email protected]
│ ├─┬ [email protected]
│ │ └── [email protected]
│ ├─┬ [email protected]
│ │ └── [email protected]
│ └── [email protected]
├─┬ [email protected]
│ ├── [email protected]
│ └─┬ [email protected]
│   └── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├─┬ [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├─┬ [email protected]
│ │ ├── [email protected]
│ │ ├── [email protected]
│ │ ├── [email protected]
│ │ └── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├─┬ [email protected]
│ │ ├─┬ [email protected]
│ │ │ └── [email protected]
│ │ └── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├─┬ [email protected]
│ │ └── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├─┬ [email protected]
│ │ └─┬ [email protected]
│ │   ├── [email protected]
│ │   ├── [email protected]
│ │   └─┬ [email protected]
│ │     └── [email protected]
│ └─┬ [email protected]
│   └── [email protected]
├─┬ [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├─┬ [email protected]
│ │ └── [email protected]
│ └── [email protected]
├─┬ [email protected]
│ ├─┬ [email protected]
│ │ └── [email protected]
│ ├─┬ [email protected]
│ │ └── [email protected]
│ └─┬ [email protected]
│   ├─┬ [email protected]
│   │ └── [email protected]
│   ├─┬ [email protected]
│   │ └── [email protected]
│   ├─┬ [email protected]
│   │ └─┬ [email protected]
│   │   └── [email protected]
│   ├─┬ [email protected]
│   │ └── [email protected]
│   └─┬ [email protected]
│     ├── [email protected]
│     ├─┬ [email protected]
│     │ └── [email protected]
│     └─┬ [email protected]
│       ├─┬ [email protected]
│       │ └── [email protected]
│       └─┬ [email protected]
│         ├─┬ [email protected]
│         │ └── [email protected]
│         └── [email protected]
├─┬ [email protected]
│ ├── [email protected]
│ ├─┬ [email protected]
│ │ ├── [email protected]
│ │ └── [email protected]
│ └─┬ [email protected]
│   └── [email protected]
├─┬ [email protected]
│ ├── [email protected]
│ ├─┬ [email protected]
│ │ ├── [email protected]
│ │ └─┬ [email protected]
│ │   ├── [email protected]
│ │   └── [email protected]
│ └── [email protected]
├── [email protected]
├─┬ [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├─┬ [email protected]
│ │ ├── [email protected]
│ │ ├── [email protected]
│ │ ├── [email protected]
│ │ ├─┬ [email protected]
│ │ │ └── [email protected]
│ │ ├── [email protected]
│ │ ├─┬ [email protected]
│ │ │ └── [email protected]
│ │ ├── [email protected]
│ │ ├─┬ [email protected]
│ │ │ ├── [email protected]
│ │ │ └── [email protected]
│ │ └─┬ [email protected]
│ │   └── [email protected]
│ ├─┬ [email protected]
│ │ ├─┬ [email protected]
│ │ │ ├── [email protected]
│ │ │ └─┬ [email protected]
│ │ │   ├─┬ [email protected]
│ │ │   │ └── [email protected]
│ │ │   ├─┬ [email protected]
│ │ │   │ ├─┬ [email protected]
│ │ │   │ │ └─┬ [email protected]
│ │ │   │ │   ├── [email protected]
│ │ │   │ │   ├── [email protected]
│ │ │   │ │   └── [email protected]
│ │ │   │ ├── [email protected]
│ │ │   │ └── [email protected]
│ │ │   ├─┬ [email protected]
│ │ │   │ └── [email protected]
│ │ │   ├── [email protected]
│ │ │   ├── [email protected]
│ │ │   ├─┬ [email protected]
│ │ │   │ └── [email protected]
│ │ │   ├── [email protected]
│ │ │   ├─┬ [email protected]
│ │ │   │ ├─┬ [email protected]
│ │ │   │ │ └── [email protected]
│ │ │   │ └── [email protected]
│ │ │   ├─┬ [email protected]
│ │ │   │ ├── [email protected]
│ │ │   │ └── [email protected]
│ │ │   └─┬ [email protected]
│ │ │     ├── [email protected]
│ │ │     └── [email protected]
│ │ ├── [email protected]
│ │ ├── [email protected]
│ │ ├─┬ [email protected]
│ │ │ └── [email protected]
│ │ ├─┬ [email protected]
│ │ │ └── [email protected]
│ │ └── [email protected]
│ ├── [email protected]
│ ├─┬ [email protected]
│ │ ├─┬ [email protected]
│ │ │ └── [email protected]
│ │ ├── [email protected]
│ │ └── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├─┬ [email protected]
│ │ ├── [email protected]
│ │ ├── [email protected]
│ │ ├── [email protected]
│ │ └── [email protected]
│ ├─┬ [email protected]
│ │ ├── [email protected]
│ │ ├── [email protected]
│ │ └─┬ [email protected]
│ │   └─┬ [email protected]
│ │     ├── [email protected]
│ │     └── [email protected]
│ ├─┬ [email protected]
│ │ ├─┬ [email protected]
│ │ │ └── [email protected]
│ │ └── [email protected]
│ ├── [email protected]
│ ├─┬ [email protected]
│ │ ├── [email protected]
│ │ └── [email protected]
│ ├── [email protected]
│ ├─┬ [email protected]
│ │ ├─┬ [email protected]
│ │ │ ├── [email protected]
│ │ │ └── [email protected]
│ │ └── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├─┬ [email protected]
│ │ ├── [email protected]
│ │ └── [email protected]
│ ├─┬ [email protected]
│ │ └── [email protected]
│ ├─┬ [email protected]
│ │ ├─┬ [email protected]
│ │ │ ├─┬ [email protected]
│ │ │ │ ├─┬ [email protected]
│ │ │ │ │ └── [email protected]
│ │ │ │ └── [email protected]
│ │ │ ├── [email protected]
│ │ │ ├─┬ [email protected]
│ │ │ │ ├── [email protected]
│ │ │ │ ├── [email protected]
│ │ │ │ ├── [email protected]
│ │ │ │ ├── [email protected]
│ │ │ │ ├── [email protected]
│ │ │ │ └── [email protected]
│ │ │ └─┬ [email protected]
│ │ │   ├── [email protected]
│ │ │   └── [email protected]
│ │ ├── [email protected]
│ │ ├─┬ [email protected]
│ │ │ └─┬ [email protected]
│ │ │   ├── [email protected]
│ │ │   └── [email protected]
│ │ ├─┬ [email protected]
│ │ │ ├── [email protected]
│ │ │ ├── [email protected]
│ │ │ ├── [email protected]
│ │ │ ├─┬ [email protected]
│ │ │ │ ├── [email protected]
│ │ │ │ ├── [email protected]
│ │ │ │ ├── [email protected]
│ │ │ │ ├── [email protected]
│ │ │ │ ├── [email protected]
│ │ │ │ └── [email protected]
│ │ │ ├── [email protected]
│ │ │ ├── [email protected]
│ │ │ ├─┬ [email protected]
│ │ │ │ └─┬ [email protected]
│ │ │ │   └── [email protected]
│ │ │ └── [email protected]
│ │ └─┬ [email protected]
│ │   ├── [email protected]
│ │   ├── [email protected]
│ │   └── [email protected]
│ └─┬ [email protected]
│   └── [email protected]
├─┬ [email protected]
│ ├─┬ [email protected]
│ │ └── [email protected]
│ └─┬ [email protected]
│   ├─┬ [email protected]
│   │ └── [email protected]
│   └── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├─┬ [email protected]
│ ├── [email protected]
│ ├─┬ [email protected]
│ │ └── [email protected]
│ └─┬ [email protected]
│   └── [email protected]
├─┬ [email protected]
│ ├─┬ [email protected]
│ │ ├─┬ [email protected]
│ │ │ └── [email protected]
│ │ ├── [email protected]
│ │ ├─┬ [email protected]
│ │ │ └── [email protected]
│ │ └─┬ [email protected]
│ │   └─┬ [email protected]
│ │     └── [email protected]
│ ├─┬ [email protected]
│ │ ├── [email protected]
│ │ └── [email protected]
│ ├─┬ [email protected]
│ │ ├── [email protected]
│ │ └─┬ [email protected]
│ │   └── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├─┬ [email protected]
│ │ ├── [email protected]
│ │ ├── [email protected]
│ │ ├── [email protected]
│ │ ├─┬ [email protected]
│ │ │ └── [email protected]
│ │ ├── [email protected]
│ │ ├─┬ [email protected]
│ │ │ └── [email protected]
│ │ ├─┬ [email protected]
│ │ │ ├─┬ [email protected]
│ │ │ │ └── [email protected]
│ │ │ └─┬ [email protected]
│ │ │   ├── [email protected]
│ │ │   ├─┬ [email protected]
│ │ │   │ └── [email protected]
│ │ │   ├── [email protected]
│ │ │   └── [email protected]
│ │ ├─┬ [email protected]
│ │ │ ├── [email protected]
│ │ │ ├── [email protected]
│ │ │ ├── [email protected]
│ │ │ └── [email protected]
│ │ ├─┬ [email protected]
│ │ │ ├── [email protected]
│ │ │ ├─┬ [email protected]
│ │ │ │ ├── [email protected]
│ │ │ │ ├── [email protected]
│ │ │ │ └── [email protected]
│ │ │ └─┬ [email protected]
│ │ │   ├── [email protected]
│ │ │   ├─┬ [email protected]
│ │ │   │ └── [email protected]
│ │ │   ├── [email protected]
│ │ │   ├── [email protected]
│ │ │   ├── [email protected]
│ │ │   └── [email protected]
│ │ ├── [email protected]
│ │ ├── [email protected]
│ │ ├── [email protected]
│ │ ├─┬ [email protected]
│ │ │ └── [email protected]
│ │ ├── [email protected]
│ │ ├── [email protected]
│ │ ├── [email protected]
│ │ ├── [email protected]
│ │ ├── [email protected]
│ │ └── [email protected]
│ └─┬ [email protected]
│   └── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├─┬ [email protected]
│ ├── [email protected]
│ └── [email protected]
├─┬ [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├─┬ [email protected]
│ │ └── [email protected]
│ ├── [email protected]
│ ├── [email protected]
│ ├─┬ [email protected]
│ │ ├─┬ [email protected]
│ │ │ └── [email protected]
│ │ └─┬ [email protected]
│ │   ├── [email protected]
│ │   ├── [email protected]
│ │   └── [email protected]
│ ├─┬ [email protected]
│ │ ├── [email protected]
│ │ ├─┬ [email protected]
│ │ │ └── [email protected]
│ │ ├─┬ [email protected]
│ │ │ ├── [email protected]
│ │ │ ├── [email protected]
│ │ │ └── [email protected]
│ │ ├─┬ [email protected]
│ │ │ └── [email protected]
│ │ ├── [email protected]
│ │ ├─┬ [email protected]
│ │ │ ├── [email protected]
│ │ │ ├── [email protected]
│ │ │ └── [email protected]
│ │ ├── [email protected]
│ │ ├── [email protected]
│ │ ├─┬ [email protected]
│ │ │ └── [email protected]
│ │ ├── [email protected]
│ │ ├── [email protected]
│ │ ├── [email protected]
│ │ ├── [email protected]
│ │ ├── [email protected]
│ │ ├── [email protected]
│ │ ├── [email protected]
│ │ ├─┬ [email protected]
│ │ │ └── [email protected]
│ │ ├── [email protected]
│ │ ├── [email protected]
│ │ ├── [email protected]
│ │ ├─┬ [email protected]
│ │ │ ├── [email protected]
│ │ │ └── [email protected]
│ │ ├── [email protected]
│ │ └── [email protected]
│ ├─┬ [email protected]
│ │ └── [email protected]
│ ├── [email protected]
│ ├─┬ [email protected]
│ │ ├── [email protected]
│ │ ├── [email protected]
│ │ └─┬ [email protected]
│ │   ├── [email protected]
│ │   ├─┬ [email protected]
│ │   │ ├─┬ [email protected]
│ │   │ │ ├─┬ [email protected]
│ │   │ │ │ ├── [email protected]
│ │   │ │ │ └── [email protected]
│ │   │ │ └── [email protected]
│ │   │ ├── [email protected]
│ │   │ └── [email protected]
│ │   ├── [email protected]
│ │   └── [email protected]
│ ├── [email protected]
│ └─┬ [email protected]
│   ├── [email protected]
│   └── [email protected]
└── [email protected]

3) npm start

$ npm start

> @ start C:\websites\automated-testing-best-practices
> .scripts/start.js

'.scripts' is not recognized as an internal or external command,
operable program or batch file.

npm ERR! Windows_NT 6.3.9600
npm ERR! argv "C:\\Program Files (x86)\\nodejs\\node.exe" "C:\\Program Files (x86)\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "start"
npm ERR! node v5.4.0
npm ERR! npm  v3.3.12
npm ERR! code ELIFECYCLE
npm ERR! @ start: `.scripts/start.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the @ start script '.scripts/start.js'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the  package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     .scripts/start.js
npm ERR! You can get their info via:
npm ERR!     npm owner ls
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     C:\websites\automated-testing-best-practices\npm-debug.log

A place for common support files

First of all, thank you very much for sharing this great project with the community. Xolvio work is a splendid piece of art!

I am moving my old project's files around to be compliant with the structure presented in this repository, but something is making me confused.

Before, I had all my support files located at tests/cucumber/features/_support/. Where should I put them now? It seems that I should move them to src/tests/features/step_definitions/domain/support, right? If that's the case, how can I share support files between domain and critical? Shouldn't we have common support files accessible at src/tests/features/step_definitions/support?

Error when running test script: cannot find module 'selenium-standalone'

Hi,

I cloned this repo and ran the test script locally. The main start script appears to run fine but when the test script runs, after all unit test pass, there is an error which appears to be related to a missing 'selenium-standalone' module. Please see the complete log below.

I attempted to manually install the selenium-standalone package but that had no impact.

⚡   npm run test

> @ test /Users/Anders/Dropbox/dev/learning/meteor/testing/xolvio/automated-testing-best-practices
> .scripts/test.js

11 02 2016 12:20:35.844:INFO [karma]: Karma v0.13.19 server started at http://localhost:9876/
11 02 2016 12:20:35.874:INFO [launcher]: Starting browser Chrome
11 02 2016 12:20:38.243:INFO [Chrome 48.0.2564 (Mac OS X 10.10.5)]: Connected on socket /#JARPs4O3-dFsIHhNAAAA with id 10328110
Chrome 48.0.2564 (Mac OS X 10.10.5): Executed 4 of 4 SUCCESS (0.205 secs / 0.182 secs)
stream error Network error: ws://localhost:3000/websocket: connect ECONNREFUSED
I20160211-12:21:19.883(-5)? [velocity] is in continuous integration mode
I20160211-12:21:20.978(-5)? [velocity] jasmine-server-integration is starting a mirror at http://localhost:64324/.
I20160211-12:21:20.983(-5)? [velocity] You can see the mirror logs at: tail -f /Users/Anders/Dropbox/dev/learning/meteor/testing/xolvio/automated-testing-best-practices/src/.meteor/local/log/jasmine-server-integration.log
PASSED jasmine-server-integration : initialization event:Account Holder => should create an account with a balance of 0
PASSED jasmine-server-integration : initialization event:Account Holder => should create an account with 0 number of checks
PASSED jasmine-server-integration : create:Account Service => creates and returns an AccountHolder backed by a Meteor user account
PASSED jasmine-server-integration : create:Account Service => does not store the password on the account holder object
PASSED jasmine-server-integration : create:Account Service => sets the branch on the account
PASSED jasmine-server-integration : transfer:Bank Service => transfers an amount from account A to the account B
PASSED jasmine-server-integration : transfer:Bank Service => returns an error when there are insufficient funds
PASSED jasmine-server-integration : transfer API:Bank Service => transfers an amount from account A to the account B
PASSED jasmine-server-integration : transfer API:Bank Service => returns an error when the owner is not logged in
PASSED jasmine-server-integration : issueChecks:Bank Service => increment the number of checks the account holder has
PASSED jasmine-server-integration : for the same bank:sameBankDepositCheck:Bank Service => should transfer the amount from account A to account B when the check is valid
PASSED jasmine-server-integration : for the same bank:sameBankDepositCheck:Bank Service => should decrease the number of checks when the check is valid
PASSED jasmine-server-integration : for the same bank:sameBankDepositCheck:Bank Service => should return an error message when account holder A does not have enough checks
PASSED jasmine-server-integration : for the same bank:sameBankDepositCheck:Bank Service => should return an error message when account holder A branch is different
PASSED jasmine-server-integration : for the same bank:sameBankDepositCheck:Bank Service => should return an error message when account holder B branch is different
TESTS RAN SUCCESSFULLY
[[[[[
~/Dropbox/dev/learning/meteor/testing/xolvio/automated-testing-best-practices/src
]]]]]

=> Started proxy.
=> Started MongoDB.
=> Started your app.

=> App running at: http://localhost:3000
module.js:341
    throw err;
    ^

Error: Cannot find module 'selenium-standalone'
    at Function.Module._resolveFilename (module.js:339:15)
    at Function.Module._load (module.js:290:25)
    at Module.require (module.js:367:17)
    at require (internal/module.js:16:19)
    at Object.<anonymous> (/Users/Anders/Dropbox/dev/learning/meteor/testing/xolvio/automated-testing-best-practices/node_modules/chimp/lib/selenium.js:3:22)
    at Module._compile (module.js:413:34)
    at Object.Module._extensions..js (module.js:422:10)
    at Module.load (module.js:357:32)
    at Function.Module._load (module.js:314:12)
    at Module.require (module.js:367:17)
    at require (internal/module.js:16:19)
    at Object.<anonymous> (/Users/Anders/Dropbox/dev/learning/meteor/testing/xolvio/automated-testing-best-practices/node_modules/chimp/lib/chimp.js:26:20)
    at Module._compile (module.js:413:34)
    at Object.Module._extensions..js (module.js:422:10)
    at Module.load (module.js:357:32)
    at Function.Module._load (module.js:314:12)
Chimp exited with code 1
Chimp exited with code 1

npm ERR! Darwin 14.5.0
npm ERR! argv "/usr/local/Cellar/node/5.5.0/bin/node" "/usr/local/bin/npm" "run" "test"
npm ERR! node v5.5.0
npm ERR! npm  v3.5.3
npm ERR! code ELIFECYCLE
npm ERR! @ test: `.scripts/test.js`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the @ test script '.scripts/test.js'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the  package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     .scripts/test.js
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs 
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls 
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /Users/Anders/Dropbox/dev/learning/meteor/testing/xolvio/automated-testing-best-practices/npm-debug.log

Npm debug log:

0 info it worked if it ends with ok
1 verbose cli [ '/usr/local/Cellar/node/5.5.0/bin/node',
1 verbose cli   '/usr/local/bin/npm',
1 verbose cli   'run',
1 verbose cli   'test' ]
2 info using [email protected]
3 info using [email protected]
4 verbose run-script [ 'pretest', 'test', 'posttest' ]
5 info lifecycle @~pretest: @
6 silly lifecycle @~pretest: no script for pretest, continuing
7 info lifecycle @~test: @
8 verbose lifecycle @~test: unsafe-perm in lifecycle true
9 verbose lifecycle @~test: PATH: /usr/local/lib/node_modules/npm/bin/node-gyp-bin:/Users/Anders/Dropbox/dev/learning/meteor/testing/xolvio/automated-testing-best-practices/node_modules/.bin:/Users/Anders/.rvm/gems/ruby-2.2.1/bin:/Users/Anders/.rvm/gems/ruby-2.2.1@global/bin:/Users/Anders/.rvm/rubies/ruby-2.2.1/bin:/usr/local/sbin:/usr/local/bin:/Users/Anders/Dropbox/dev/bash_scripts:/Applications/Postgres.app/Contents/Versions/9.4/bin:/usr/local/sbin:/usr/local/share/npm/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/Anders/.rvm/bin
10 verbose lifecycle @~test: CWD: /Users/Anders/Dropbox/dev/learning/meteor/testing/xolvio/automated-testing-best-practices
11 silly lifecycle @~test: Args: [ '-c', '.scripts/test.js' ]
12 silly lifecycle @~test: Returned: code: 1  signal: null
13 info lifecycle @~test: Failed to exec test script
14 verbose stack Error: @ test: `.scripts/test.js`
14 verbose stack Exit status 1
14 verbose stack     at EventEmitter.<anonymous> (/usr/local/lib/node_modules/npm/lib/utils/lifecycle.js:232:16)
14 verbose stack     at emitTwo (events.js:100:13)
14 verbose stack     at EventEmitter.emit (events.js:185:7)
14 verbose stack     at ChildProcess.<anonymous> (/usr/local/lib/node_modules/npm/lib/utils/spawn.js:24:14)
14 verbose stack     at emitTwo (events.js:100:13)
14 verbose stack     at ChildProcess.emit (events.js:185:7)
14 verbose stack     at maybeClose (internal/child_process.js:821:16)
14 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:211:5)
15 verbose pkgid @
16 verbose cwd /Users/Anders/Dropbox/dev/learning/meteor/testing/xolvio/automated-testing-best-practices
17 error Darwin 14.5.0
18 error argv "/usr/local/Cellar/node/5.5.0/bin/node" "/usr/local/bin/npm" "run" "test"
19 error node v5.5.0
20 error npm  v3.5.3
21 error code ELIFECYCLE
22 error @ test: `.scripts/test.js`
22 error Exit status 1
23 error Failed at the @ test script '.scripts/test.js'.
23 error Make sure you have the latest version of node.js and npm installed.
23 error If you do, this is most likely a problem with the  package,
23 error not with npm itself.
23 error Tell the author that this fails on your system:
23 error     .scripts/test.js
23 error You can get information on how to open an issue for this project with:
23 error     npm bugs
23 error Or if that isn't available, you can get their info via:
23 error     npm owner ls
23 error There is likely additional logging output above.
24 verbose exit [ 1, true ]

Can't import { Meteor } from 'meteor/meteor'.

It doesn't seem like you can explicitly import package dependencies at the moment. Trying to do import { Meteor } from 'meteor/meteor' results in 'Module not found: Error: Cannot resolve module 'meteor/meteor' in ...`.

I'm trying to devise a way to make this work and could use some feedback. I'm very new to wallaby but it seems like there would be two steps to this.

One, we would need to preprocess the source files, look for any import statements that begin with "meteor/", and transform them from import { Meteor} from "meteor/meteor" into something like import { Meteor } from ".meteor/local/build/programs/web.browser/packages/meteor".

Two, we would add some sort of compiler to meteor packages to transform them from exporting to the global Package object to a babel compatible format (What would do achieve this?).

Any thoughts? Thanks!

Wallaby issues

npm start seems fine (with(out) MIRROR=1).

With wallaby_client.js

ReferenceError: Can't find variable: process
at src/imports/testing/client/__meteor_runtime_config__.js:6:16
ReferenceError: Can't find variable: __meteor_runtime_config__
at src/.meteor/local/build/programs/web.browser/packages/meteor.js:36:0
at src/.meteor/local/build/programs/web.browser/packages/meteor.js:28:0
at src/.meteor/local/build/programs/web.browser/packages/meteor.js:1:0
TypeError: 'undefined' is not an object (evaluating 'Package.meteor.Meteor')
at src/.meteor/local/build/programs/web.browser/packages/meteor-base.js:4:0
at src/.meteor/local/build/programs/web.browser/packages/meteor-base.js:1:0

(many of the last one, referring to Package.meteor., Package.mongo., etc.)

and with wallaby_server.js

TypeError: Path must be a string. Received undefined
  at assertPath (path.js:8:11)
  at Object.posix.resolve (path.js:426:5)
  at module.exports (.../xolvio/automated-testing-best-practices/wallaby_server.js:276:20)

npm run karma seems fine too (23/23).

This is following the README instructions with a fresh repo. Atom 1.7.2, Wallaby 1.0.7. nvm current is v0.10.40.

Fail if Meteor can't start in the start.js script

I'm new to automated testing with Chimp and am having issues seeing the actual tests that are part of this package. Specifically, when I run npm run karma or npm test, I do not see any of the tests listed and their results. I'm expecting to see a list like I do with Mocha (that's what I'm most used to). I do not see the list in the Terminal or in browser at http://localhost:9876. There is an error, Some of your tests did a full page reload!, that seems to stop the tests from running...

Here's a snippet of what I'm running and seeing in the terminal:

$ npm test

> @ test /Users/gauravb/code/automated-testing-best-practices
> .scripts/test.js

22 03 2016 17:01:37.246:INFO [karma]: Karma v0.13.22 server started at http://localhost:9876/
22 03 2016 17:01:37.253:INFO [launcher]: Starting browser Chrome
22 03 2016 17:01:37.915:INFO [Chrome 49.0.2623 (Mac OS X 10.11.0)]: Connected on socket /#UM5DYBkrknB6sAymAAAA with id 99027998
22 03 2016 17:01:38.399:WARN [web-server]: 404: /merged-stylesheets.css?hash=10624882b9f7b639d9b1eef9287a239f4e4f800c
Chrome 49.0.2623 (Mac OS X 10.11.0) ERROR
  Some of your tests did a full page reload!


Karma exited with code 1
npm ERR! Test failed.  See above for more details.

I'm very excited to get automated testing included in my Meteor app and Chimp seems like a great platform. Any help in getting things up and running as soon as possible would be greatly appreciated!

Here's some environment info that may be of use:
node v0.12.7 (npm v2.11.3)
Meteor 1.2.1
Mac OS X 10.11

Chimp process not killed in process close event

Hi,

I cannot manage to run CI=1 npm start twice in my local environment. I get this error:

> @ start /home/kristijan/code/meteor-tests
> .scripts/start.js

Can't listen on port 3000. Perhaps another Meteor is running?

Running two copies of Meteor in the same application directory
will not work. If something else is using port 3000, you can
specify an alternative port with --port <port>.
Meteor App exited with code 254

npm ERR! Linux 4.2.0-22-generic
npm ERR! argv "/home/kristijan/.nvm/versions/node/v5.3.0/bin/node" "/home/kristijan/.nvm/versions/node/v5.3.0/bin/npm" "start"
npm ERR! node v5.3.0
npm ERR! npm  v3.3.12
npm ERR! code ELIFECYCLE
npm ERR! @ start: `.scripts/start.js`
npm ERR! Exit status 254
npm ERR! 
npm ERR! Failed at the @ start script '.scripts/start.js'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the  package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     .scripts/start.js
npm ERR! You can get their info via:
npm ERR!     npm owner ls 
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/kristijan/code/meteor-tests/npm-debug.log

I noticed that chimp process is not killed in the close event here, only the meteor app is killed. I had to run kill -9 pid to kill the chimp process. Is there a way to fix this?

When I run only npm start and kill watch process, I can rerun it without any problem.

OS: Xubuntu 15.10 64 bit
node: v5.3.0
npm: 3.3.12

Absolute include paths do not work

Hi! I've been trying out this project structure but I've run into a snag. It seems like wallaby is not able to find modules that are included via an absolute path, although this is supported in meteor.

import Hello from '/imports/test'; Error: Cannot find module "/imports/test.js"

using a relative path works fine:

import Hello from '../../test.js';

Do you think it would be possible to get this working? If you point me in the right direction I could give it a shot.

I've published a fork that shows the issue:
https://github.com/danimbrogno/automated-testing-best-practices

See error in /imports/ui/components/inctest.js

Logic regarding service classes

Is the 'Iso' suffix on the service classes to designate a base class that a singleton is instansiated from, that happens to be available on both the client and server (isomorphic)?

import AccountServiceIso from './iso';
import {AccountHolderRepository} from '../../../domain/model/account-holder/account-holder-repository';

export default class AccountService extends AccountServiceIso {
  static getInstance() {
    if (!this.instance) {
      this.instance = new AccountService();
    }
    return this.instance;
  }
  getCurrentAccountHolder() {
    var user = Meteor.user();
    if (!user) {
      return AccountHolderRepository.getNullAccountHolder();
    }
    return AccountHolderRepository.find(user.accountHolderId);
  }
};

Given the client class has no behaviour, isn't this early optimisation?

running chimp with multiple meteor apps

what is the best practice to run chimp with multiple meteor apps?
In my case, I am running 3 different meteor apps.

simple scenario:
Given that user clicks in app1 on url link to app2
Then I want to expect some things in app2.

should I rewrite start.js to run multiple meteor apps?

chimp 0.31.0 breaking the tests

Tests are breaking when trying to use chimp 0.31.0 .

I need 0.31.0 to set up parallelization - to pass feature files as arguments to chimp, instead of specifying --path.

When I deposit the check into my account
  Error: Underlying driver does not implement advanced user interactions yet.
When I transfer $20 to "James"'s bank account
  Error: Underlying driver does not implement advanced user interactions yet.

You can reproduce this in https://github.com/lgandecki/automated-testing-best-practices/tree/withChimp0.31.0

If we use https://github.com/xolvio/chimp/tree/multidriver instead, or 0.30.0 it passes.

This sample repo does not seem to be testing React components

I was reviewing this repo and trying to understand how React components are being tested. However, it appears as if React components are not being tested at all.

UI/React Components do not appear in the velocity test summary:
The following files, even though they are in the test directory, are not listed in the velocity test summary:

/tests/components/ui/account-summary-spec.jsx:

describe('Bank Transfer Component', function () {
  describe('doTransfer', function () { ...

/tests/components/ui/bank-transfer-spec.jsx:

describe('Account Summary Component', function () { ...

screen shot 2016-02-17 at 3 52 23 pm

Removing everything (except the required render call) has no impact on test results:

I made the following changes. All tests still pass.

/src/client/components/bank-transfer.jsx

BankTransfer = React.createClass({
  render() {
    return (
       <div className="bank-transfer">
     FOO
       </div>
    );
  }
});

/src/client/components/account-summary.jsx

AccountSummary = React.createClass({
  render() {
    return (
       <div className="account-summary">
         $ <span className="account-summary__balance">FOO</span>
       </div>
    );
  }
});

So, my questions are:

  • Why do the tests above not appear in the test summary?
  • Why do tests pass even when removing all code from the components?
  • Should a best practices repo like this not also include tests of the actual components?

Fixtures examples

Do you have recommendations on where to place fixtures and writing them?

npm install fails in windows & wallaby also fails

C:\Users\projects\automated-testing-best-practices>npm install

npm WARN deprecated [email protected]: react-tools is deprecated. For more information, visit https://fb.me/react-tools-deprecated

[email protected] install C:\Users\projects\automated-testing-best-practices\node_modules\chimp\node_modules\fibers
node build.js || nodejs build.js


C:\Users\projects\automated-testing-best-practices\node_modules\chimp\node_modules\fibers>node "D:\programs\node\node_modules\npm\bin\node-gyp-bin....\node_modules\node-gyp\bin\node-gyp.js" rebuild --release
Building the projects in this solution one at a time. To enable parallel build, please add the "/m" switch.
MSBUILD : error MSB3428: Could not load the Visual C++ component "VCBuild.exe".
To fix this, 1) install the .NET Framework 2.0 SDK, 2) install Microsoft Visua
l Studio 2005 or 3) add the location of the component to the system path if it
is installed elsewhere. [C:\Users\projects\automated-testing-best-practices\no
de_modules\chimp\node_modules\fibers\build\binding.sln]
gyp ERR! build error
gyp ERR! stack Error: C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe failed with exit code: 1
gyp ERR! stack at ChildProcess.onExit (D:\programs\node\node_modules\npm\node_modules\node-gyp\lib\build.js:267:23)
gyp ERR! stack at ChildProcess.emit (events.js:98:17)
gyp ERR! stack at Process.ChildProcess._handle.onexit (child_process.js:820:12)
gyp ERR! System Windows_NT 6.2.9200
gyp ERR! command "node" "D:\programs\node\node_modules\npm\node_modules\node-gyp\bin\node-gyp.js" "rebuild" "--release"
gyp ERR! cwd C:\Users\projects\automated-testing-best-practices\node_modules\chimp\node_modules\fibers
gyp ERR! node -v v0.10.40
gyp ERR! node-gyp -v v1.0.1
gyp ERR! not ok
Build failed
'nodejs' is not recognized as an internal or external command,
operable program or batch file.

npm WARN optional dep failed, continuing [email protected]
npm WARN optional dep failed, continuing [email protected]
npm WARN optional dep failed, continuing [email protected]
npm WARN deprecated [email protected]: graceful-fs version 3 and before will fail on newer node releases. Please update to graceful-fs@^4.0.0 as soon as possible.
npm WARN deprecated [email protected]: graceful-fs version 3 and before will fail on newer node releases. Please update to graceful-fs@^4.0.0 as soon as possible.
npm WARN engine [email protected]: wanted: {"iojs":">= 1.0.0","node":">= 0.12.0"} (current: {"node":"0.10.40","npm":"1.4.28"})
npm ERR! [email protected] install: node build.js || nodejs build.js
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script.
npm ERR! This is most likely a problem with the fibers package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node build.js || nodejs build.js
npm ERR! You can get their info via:
npm ERR! npm owner ls fibers
npm ERR! There is likely additional logging output above.
npm ERR! System Windows_NT 6.2.9200
npm ERR! command "D:\programs\node\node.exe" "D:\programs\node\node_modules\npm\bin\npm-cli.js" "install"
npm ERR! cwd C:\Users\projects\automated-testing-best-practices
npm ERR! node -v v0.10.40
npm ERR! npm -v 1.4.28
npm ERR! code ELIFECYCLE
npm ERR! not ok code 0


wallaby console
Configuration:wallaby.js
Unexpected token >

Any suggestions?

Module loading logic

I'm trying to better understand module-loader.js (or on server):

// Force meteor to load modules at build time, so they can be required in Chimp's server.execute
if (false) {
  require('./imports/domain/services/bank-service/client');
  require('./imports/application/services/account-service/client');
}

Can you explain this in more detail? What confuses me is why there's a conditional that will never evaluate to true, and therefore never be called

running chimp with multiple meteor apps

what is the best practice to run chimp with multiple meteor apps?
In my case, I am running 3 different meteor apps.

simple scenario:
Given that user clicks in app1 on url link to app2
Then I want to expect some things in app2.

should I rewrite start.js to run multiple meteor apps?

Documentation for running Wallaby with my Meteor project

I have an existing Meteor project, using angular on client. It would be nice to use Wallaby when I'm running Chimp in the background.

I thought I might be able to replace src with a symlink to my own project, and include the appropriate file patterns in wallaby_client.js and wallaby_server.js, but haven't had cycles for a full test yet so I figured I'd ask if there are any tips to get started.

Is this kind of setup intended to work in current state? Is any documentation planned to be able to configure Wallaby w/ Chimp and an arbitrary Meteor project?

How to test functionality that should only run through UI layer?

Thanks for this great resource, I've learned a lot about domain driven design through this example and the links you provided. I have a question though.

There are aspects of my app which require a UI test, but do not require a domain level test and I'm not sure how this is best achieved.

For example, if a user wants to change their password. It doesn't make sense for me to test Meteor's built in password changing mechanism, but I would like to make sure that my app calls this method correctly.

Is there a way to mark a test to run on critical, and skip otherwise?

Mirror dies when server restarts

We are just getting going with cucumber testing and our cucumber tests were blowing away the data in our development database when setting up the tests, so we decided to go with the mirror option. Unfortunately that doesn't work. Every time the code changes and the server restarts it dies with a failure something like this (thought it's not necessarily the same every time)

=> Server modified -- restarting...
/Users/username/.meteor/packages/coffeescript/.1.0.17.1q4nwrv++os+web.browser+web.cordova/plugin.compileCoffeescript.os/npm/node_modules/meteor/promise/node_modules/meteor-promise/promise_server.js:116
      throw error;
            ^
Error: ENOENT, symlink '/Users/username/.meteor/packages/meteor/.1.1.14.1lulwc4++os+web.browser+web.cordova/npm/node_modules'
Meteor Mirror exited with code 8

One side-effect is that when the mirror dies, the primary server does not terminate so it has to be manually killed and then restarted to get it going again.

Any idea why this would be happening?

my npm start command looks like this FWIW... "start": "WITH_MIRROR=1 .scripts/start.js"

taking screenshots of failed steps with chimp

please could you tell me, how should I tell chimp to take screenshots on circleCI?

I tried this in start.js

if (process.env.CIRCLECI) {
  chimpSwitches +=
  ' --screenshotsPath=' + path.resolve(process.env.CIRCLE_ARTIFACTS) + '/chrome' +
  ' --screenshotsOnError';
}

and this is how I call chimp in circle.yml

test:
  pre:
    - mkdir -p $CIRCLE_TEST_REPORTS/cucumber
  override:
    - mkdir -p $CIRCLE_ARTIFACTS/chrome
    - touch $CIRCLE_ARTIFACTS/chrome/something.txt

    # CHIMP CUCUMBER - Test the app with Chrome
    - cd app && npm run ci:
        environment:
          MONGO_URL: "mongodb://127.0.0.1:27018/kuknito"
          MONGO_OPLOG_URL: "mongodb://127.0.0.1:27018/local"
          CUCUMBER_JSON_OUTPUT: "$CIRCLE_TEST_REPORTS/cucumber/chrome.cucumber"

however screenshots won't get created and I don't know why :(

Notes on TESTING-SUCCESS-FACTORS.md

Hi,

I'm really grateful to you for the excellent testing factors article. I thought some feedback might be useful to you.

To give you an idea of my experience and competencies: I'm fairly new to JS, but I've been coding for 10 years and I'm reasonably experienced in writing unit tests (but not end-to-end tests) in C#. I practice TDD for all of my business logic code and most of my other code. As well as coding I am responsible for designing the systems and requirements gathering from our clients and I do that on a very regular basis.

I'm currently working on the MVP for our first SaaS product which is using Meteor 1.3, React and Redux.

The goal for my visiting this repo was to get continuous testing running in my IDE (Wallaby) for both my business logic code and the business logic parts of my UI code and then to look at how to automate end-to-end testing and UI testing.

My notes on the Testing Success Factors Doc:

General

Terminology

You are assuming the reader knows quite a lot of terminology. Because a lot of these terms are used so loosely, it might be worth defining what the meanings of the following items in the context fo this article (or having a terminology page):

  • Test Script
  • Feature File

The running example

The test script example at the top of the example (the Nightwatch one) is from the perspective of a user, whereas the example later in the article is from the perspective of Google and then switches back to the user perspective. The article does state that, but it means that when you scan the article and just compare the two versions of the tests it's easy to assume they are supposed to represent the same test, but actually they represent subtly different things - I found that confusing at first. I think it might be more helpful to have a consistent test so the reader can see the evolution more easily. In the second lesson the natural language script then shifts back to being from the user's perspective.

I think the example from Google's perspective may not be the best choice, you're assuming the reader knows that Google caches stuff and the caching is not perhaps not really a business domain requirement anyway (the time it takes for results to be shown is, but the caching is an implementation issue maybe?)?

Lesson 1

I found the test names at the end of Lesson 1 a bit confusing too: The first one 'Google Index updates cached pages' I don't really understand, would that be clearer as something like describe('The search results shown to the user')

The second one, 'User searches after the index', doesn't really follow the naming convention I'm used to and ignores the 'it' prefix - I wonder if it would be better written as it('includes Wikipedia - Rembrandt if Wikipedia has already been indexed'

In general is it preferable to have test titles capture the whole spec, than then relying on additional comments which are likely to not get updated and so gradually become out of date or contradictory to the test title?

Lesson 2

Would benefit from a paragraph at the start explaining what Cucumber is and what a feature file is.

The wikipedia DDD page might be more of a hinderance than a help to people who are new to this, it makes DDD look fairly complex. I wonder if there is a good beginners guide that could be linked instead?

If you are interested in step reuse and the readability of your testing codebase, you can achieve that through proper software engineer principles at the automation layer, thus creating a clear delineation between the natural domain language, and the test automation code that verifies the domain language is being fulfilled by the application

A good example of the above (or link to one) would probably really help at that point, I think I know what the above means, but it took a good few read-throughs.

Lesson 3

The pyramid: It might be worth saying that pyramid effectively works from the top down, i.e. Service layer tests test code that has also been tested in the Unit test layer, and UI tests (in the context of the diagram) test code that has been tested by both the Service and Unit tests.

They refactor the AccountHolder and associated unit test to store the balance in a nested field checkingAccount.balance instead of balance. They run all the unit tests and they pass

If this article is also aimed at non-JavaScript developers it may be worth mentioning that this is a scenario that's less common in a strongly-typed environment (as changing the interface of AccountHolder would have broken other unit tests if JS was strongly typed).

An example of what a domain integrity actually looks like would probably be helpful in this lesson.

Lesson 4

Looks good :)

is it possible to run wallaby on meteor 1.2.1 ?

I would like to implement wallaby.js to my project but I am currently stuck on meteor 1.2 and I cannot easily upgrade to version 1.3 because that breaks the whole app due to ES6 modules. ( I am on package based architecture like telescope app )
The velocity package tests currently take too much time to load and to rerun them, it's pain to run the test because I don't want to wait like 30 seconds until they rerun.
What is your opinion please, what should I do.

  • Is there an easy way to run wallaby on meteor 1.2?
  • Should I rewrite the architecture (40 custom packages) to ES6 module style and use wallaby then? (this will be a huge task I think)
  • any other suggestions? :)

Thank you very much for everything you do at xolvio!

Are screenshots on error only a cucumber feature?

I am trying to get screenshots on error to work but our tests are strictly mocha + webdriver tests (no cucumber) Is that the reason I can't get it to work? When it errors I have no screenshots on CI and so I tried debugging by setting them up locally like this:

scrnBin = path.resolve(baseDir, 'screenshots');
if (process.env.CIRCLECI) {
  chimpSwitches += ' --screenshotsPath="' + process.env.CIRCLE_ARTIFACTS + '"';
} else {
  chimpSwitches += ' --screenshotsPath="'+ scrnBin + '" --screenshotsOnError=1';
}

(I also tried screensotsOnError=true)
No screenshots to be found.

Hmm I think I answered my own issue by looking at the source repo. If this is the case, perhaps you can update the documentation because it's misleading. Maybe "When using cucumber, Chimp can save them to file or include..."

I having problems with service configurations

I added accounts-facebook to this app.

When I start the app and the @Focus features run I can do this in the browser:
Accounts.loginServiceConfiguration.find().fetch()
Found: 1

As soon as the [chimp] critical scenarios... are run the service configuration is lost.
Accounts.loginServiceConfiguration.find().fetch()
Found: 0

Any idea where the problem here could be?

Require failure using wallaby_server with wallaby and coffeescript

I'm trying to get wallaby working for server tests for a meteor app that uses coffeescript. So I tried to use the wallaby_server file from this repo however it fails because it can't find any meteor modules/packages. It also fails to load local modules referenced by absolute path or with the extension '.coffee'. The last is totally acceptable and the requirement for relative paths is manageable if necessary but obviously the failure to load meteor packages is a show stopper.

Sample project demonstrating the issue: https://github.com/jdrucza/coffee-wallaby

NOTE: I renamed the wallaby_server.js to '.wallaby_server.js' (i.e. starting with a '.') so it would not be picked up by meteor.

Probably obvious but for completeness/search-aid the error is:

wallaby.js started
core v1.0.259
Runtime error: Error: Cannot find module 'meteor/meteor'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (./imports/testSetup.spec.js:5:26)
....

I suspect the issue may be that wallaby needs to be configured to use meteor's coffeescript rather than its in-built version but I've no idea how to make this happen.

wip/migrate_1.3 - ReferenceError: Meteor is not defined (chimp error)

Using the following branch
git clone -b wip/migrate_1.3 --single-branch https://github.com/xolvio/automated-testing-best-practices.git

--I am getting the following error when I run npm start on windows----

C:\Users\projects\automated-testing-best-practices>npm start

@ start C:\Users\projects\automated-testing-best-practices
node .scripts/start.js

[[[[[ C:\Users\projects\automated-testing-best-practices\src ]]]]]

=> Started proxy.
=> Started MongoDB.
=> Started your app.

=> App running at: http://localhost:3000
Type Control-C twice to stop.

[chimp] Watching features with tagged with @Focus

[chimp] Running...

[chimp] domain scenarios...
C:\Users\projects\automated-testing-best-practices\src\imports\domain\services\bank-service\iso.js:3
module.exports = Meteor.isServer ? require('./server/bank-service') : require('./client/bank-service');
^

ReferenceError: Meteor is not defined
at Object. (iso.js:1:18)
at Module._compile (module.js:399:26)
at loader (C:\Users\projects\automated-testing-best-practices.scripts\node_modules\babel-register\lib\node.js:128:5)
at Object.require.extensions.(anonymous function) as .js
at Module.load (module.js:345:32)
at Function.Module._load (module.js:302:12)
at Module.require (module.js:355:17)
at require (internal/module.js:13:17)
at Object. (C:\Users\projects\automated-testing-best-practices\src\imports\domain\services\bank-service\index.js:27:12)
at Module._compile (module.js:399:26)
at loader (C:\Users\projects\automated-testing-best-practices.scripts\node_modules\babel-register\lib\node.js:128:5)
at Object.require.extensions.(anonymous function) as .js
at Module.load (module.js:345:32)
at Function.Module._load (module.js:302:12)
at Module.require (module.js:355:17)
at require (internal/module.js:13:17)


changes to automated-testing-best-practices.scripts\node_modules\chimp\chimp.js
replace process.env.PWD with process.env.PWD?process.env.PWD:process.cwd()

to support windows. great if it is fixed upstream in chimp


changes to wallaby_server.js
(this works perfectly for me now)

if(process.platform === 'win32'){
    //which is the meteor release
    var releaseFile = path.join(wallaby.localProjectDir,'src','.meteor','release');
    var meteorRelease = fs.readFileSync(releaseFile).toString().trim().replace('METEOR@','');
    meteorRelease = '1.1.'+ [meteorRelease.split('-')[0].split('.').join('') , meteorRelease.split('-')[1] ].join('-');
    require('shelljs/global');
    var meteorInstallation = which('meteor').replace('meteor.bat','');
    console.log(meteorInstallation)
    runner = path.join(meteorInstallation,'packages','meteor-tool',meteorRelease,'mt-os.windows.x86_32','dev_bundle','bin','node.exe');
    console.log(runner)
  } else {
  runner  = path.resolve(process.env.HOME, '.nvm/v0.10.40/bin/node')
  }

env: {
      type: 'node',
      runner:runner
    }

as fibers don't work, used the following
copied meteorInstallation + \packages\velocity_meteor-tool\1.1.10_2\mt-os.windows.x86_32\dev_bundle\server-lib\node_modules\fibers\bin\win32-ia32-v8-3.14 to
C:\Users\projects\automated-testing-best-practices\node_modules\fibers\bin

also inside bootstrap, var fs is to be defined.

Great if you can help me with the chimp error outlined above. Tks

Chrome or firefox can't find selenium on second time run

Hello, this problem happens for me while running chimp e2e tests second, third or any other time, while on headless linux host, freshly built on docker.
First time after image is built test runs well.

What should I do to forgot about this trouble? Why it looses to find the screen and open display?

[chimp][helper] setupBrowserAndDDP had error
{ [Error: Unable to connect to host localhost on port 7055 after 45000 ms. Firefox console output:
Error: cannot open display: :99
]
  message: 'Unable to connect to host localhost on port 7055 after 45000 ms. Firefox console output:\nError: cannot open display: :99\n',
  type: 'RuntimeError',
  seleniumStack: 
   { status: 13,
     type: 'UnknownError',
     message: 'An unknown server-side error occurred while processing the command.',
     orgStatusMessage: 'Unable to connect to host localhost on port 7055 after 45000 ms. Firefox console output:\nError: cannot open display: :99\n' } }
Error: Unable to connect to host localhost on port 7055 after 45000 ms. Firefox console output:
    at Object.Future.wait (/jenkins/workspace/docker_selenium/node_modules/chimp/node_modules/xolvio-sync-webdriverio/node_modules/fibers/future.js:449:15)
    at Object.<anonymous> (/jenkins/workspace/docker_selenium/node_modules/chimp/node_modules/xolvio-sync-webdriverio/node_modules/wdio-sync/build/index.js:345:27)
    at initBrowser (/jenkins/workspace/docker_selenium/node_modules/chimp/dist/lib/chimp-helper.js:161:17)
    at Object.setupBrowserAndDDP (/jenkins/workspace/docker_selenium/node_modules/chimp/dist/lib/chimp-helper.js:215:7)
    at /jenkins/workspace/docker_selenium/node_modules/chimp/dist/lib/cucumberjs/hooks.js:21:24
    at /jenkins/workspace/docker_selenium/node_modules/chimp/node_modules/meteor-promise/fiber_pool.js:32:39
    - - - - -
Error: cannot open display: :99

Here is also my xvfb start-stop script

XVFB=/usr/bin/Xvfb
XVFBARGS=":99 -screen 0 1600x1200x24 -fbdir /var/run -ac -nolisten tcp"
PIDFILE=/var/run/xvfb.pid
case "$1" in
  start)
    echo -n "Starting virtual X frame buffer: Xvfb"
    start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --background --exec $XVFB -- $XVFBARGS
    echo "."
    ;;
  stop)
    echo -n "Stopping virtual X frame buffer: Xvfb"
    start-stop-daemon --stop --quiet --pidfile $PIDFILE
    echo "."
    ;;
  restart)
    $0 stop
    $0 start
    ;;
  *)
        echo "Usage: /etc/init.d/xvfb {start|stop|restart}"
        exit 1
esac

exit 0

wallaby on server cannot understand meteor style es6 imports

I start webstorm, start my meteor app, then start wallaby server config, and I get this error:

image

do you know what I might be doing wrong, please?

my wallaby_server.js

// How to run:
//
// 1. Start your Meteor app and wait until it has built.
// 2. Start Wallaby with this configuration.

// How to modify for your project:
//
// 1. Change relativeMeteorAppPath (line 16 and 69) to the relative location of your Meteor app.
// 2. Adjust the files array (line 37) to match all your Meteor app server files.
// 3. Adjust the tests array (line 44) to match all your server tests that should run with Wallaby.


var path = require('path');
var nodePath = require('child_process')
  .execSync('meteor node -e "process.stdout.write(process.execPath)"', {encoding: 'utf8'});
var relativeMeteorAppPath = '';

module.exports = function (wallaby) {
  process.env.NODE_PATH += path.delimiter +
    path.join(
      wallaby.localProjectDir,
      relativeMeteorAppPath,
      '.meteor/local/build/programs/server/node_modules'
    );

  process.env.NODE_PATH += path.delimiter +
    path.join(
      wallaby.localProjectDir,
      relativeMeteorAppPath,
      'node_modules'
    );

  process.env.NODE_PATH += path.delimiter +
    path.join(wallaby.projectCacheDir, relativeMeteorAppPath, 'imports');

  return {
    files: [
      {pattern: relativeMeteorAppPath + '/imports/**/*.@(js|jsx)', load: false},
      {pattern: relativeMeteorAppPath + '/imports/**/*-spec.@(js|jsx)', ignore: true},
      {pattern: relativeMeteorAppPath + '/imports/**/ui/**/*.@(js|jsx)', ignore: true},
      {pattern: relativeMeteorAppPath + '/.meteor/**/*', ignore: true},
    ],

    tests: [
      {pattern: relativeMeteorAppPath + '/imports/**/*-spec.@(js|jsx)'},
      {pattern: relativeMeteorAppPath + '/imports/**/ui/**/*-spec.@(js|jsx)', ignore: true},
      {pattern: 'tests/jasmine/server/unit/**/*-spec.@(js|jsx)'},
      {pattern: 'tests/jasmine/server/unit/quarantine/**/*.@(js|jsx)', ignore: true},
    ],

    // files: [
    //   './**/*.coffee',
    //   {pattern: './**/*.coffee', ignore:true},
    //   {pattern: relativeMeteorAppPath + '/.meteor/**/*', ignore: true}, // don't think this is needed but neither should it hurt
    // ],

    // tests: [
    //   {pattern: relativeMeteorAppPath + '/**/**/*-spec.@(js|coffee)'},
    //   {pattern: relativeMeteorAppPath + '/**/**/ui/**/*-spec.@(js|coffee)', ignore: true},
    // ],

    compilers: {
      '**/*.@(js|jsx)': wallaby.compilers.babel(),
    },

    env: {
      type: 'node',
      runner: nodePath,
    },

    testFramework: 'jasmine',

    workers: {
      recycle: true,
    },

    debug: true,

    bootstrap: function () {
      var relativeMeteorAppPath = '';

      wallaby.delayStart();

      if (!process.env.ROOT_URL) {
        process.env.ROOT_URL = 'http://localhost:3100/';
      }
      if (!process.env.MONGO_URL) {
        process.env.MONGO_URL = 'mongodb://127.0.0.1:27017/wallaby-server';
      }

      var path = require('path');
      var appPath = path.resolve(wallaby.localProjectDir, relativeMeteorAppPath);
      var serverPath = path.resolve(appPath,
        path.join('.meteor', 'local', 'build', 'programs', 'server')
      );
      process.argv.splice(2, 0, 'program.json');
      try {
        process.chdir(serverPath);
      } catch (error) {
        if (error.message.match(/^ENOENT/)) {
          throw new Error('You need to run the Meteor app before you start Wallaby!');
        } else {
          throw error;
        }
      }

      //
      // boot.js
      //
      // Modifications:
      // - Only load packages

      var Fiber = require("fibers");
      var fs = require("fs");
      var path = require("path");
      var Future = require("fibers/future");
      var _ = require('underscore');
      var sourcemap_support = require('source-map-support');

      var bootUtils = require(path.resolve(serverPath, './boot-utils.js'));
      var files = require(path.resolve(serverPath, './mini-files.js'));
      var npmRequire = require(path.resolve(serverPath, './npm-require.js')).require;

      // This code is duplicated in tools/main.js.
      var MIN_NODE_VERSION = 'v0.10.41';

      if (require('semver').lt(process.version, MIN_NODE_VERSION)) {
        process.stderr.write(
          'Meteor requires Node ' + MIN_NODE_VERSION + ' or later.\n');
        process.exit(1);
      }

      // read our control files
      var serverJsonPath = path.resolve(process.argv[2]);
      var serverDir = path.dirname(serverJsonPath);
      var serverJson = require(path.resolve(serverPath, "./server-json.js"));
      var configJson =
        JSON.parse(fs.readFileSync(path.resolve(serverDir, 'config.json'), 'utf8'));

      // Set up environment
      __meteor_bootstrap__ = {
        startupHooks: [],
        serverDir: serverDir,
        configJson: configJson };
      __meteor_runtime_config__ = { meteorRelease: configJson.meteorRelease };

      if (!process.env.APP_ID) {
        process.env.APP_ID = configJson.appId;
      }

      // Map from load path to its source map.
      var parsedSourceMaps = {};

      // Read all the source maps into memory once.
      _.each(serverJson.load, function (fileInfo) {
        if (fileInfo.sourceMap) {
          var rawSourceMap = fs.readFileSync(
            path.resolve(serverDir, fileInfo.sourceMap), 'utf8');
          // Parse the source map only once, not each time it's needed. Also remove
          // the anti-XSSI header if it's there.
          var parsedSourceMap = JSON.parse(rawSourceMap.replace(/^\)\]\}'/, ''));
          // source-map-support doesn't ever look at the sourcesContent field, so
          // there's no point in keeping it in memory.
          delete parsedSourceMap.sourcesContent;
          var url;
          if (fileInfo.sourceMapRoot) {
            // Add the specified root to any root that may be in the file.
            parsedSourceMap.sourceRoot = path.join(
              fileInfo.sourceMapRoot, parsedSourceMap.sourceRoot || '');
          }
          parsedSourceMaps[path.resolve(__dirname, fileInfo.path)] = parsedSourceMap;
        }
      });

      var retrieveSourceMap = function (pathForSourceMap) {
        if (_.has(parsedSourceMaps, pathForSourceMap))
          return { map: parsedSourceMaps[pathForSourceMap] };
        return null;
      };

      var origWrapper = sourcemap_support.wrapCallSite;
      var wrapCallSite = function (frame) {
        var frame = origWrapper(frame);
        var wrapGetter = function (name) {
          var origGetter = frame[name];
          frame[name] = function (arg) {
            // replace a custom location domain that we set for better UX in Chrome
            // DevTools (separate domain group) in source maps.
            var source = origGetter(arg);
            if (! source)
              return source;
            return source.replace(/(^|\()meteor:\/\/..app\//, '$1');
          };
        };
        wrapGetter('getScriptNameOrSourceURL');
        wrapGetter('getEvalOrigin');

        return frame;
      };
      sourcemap_support.install({
        // Use the source maps specified in program.json instead of parsing source
        // code for them.
        retrieveSourceMap: retrieveSourceMap,
        // For now, don't fix the source line in uncaught exceptions, because we
        // haven't fixed handleUncaughtExceptions in source-map-support to properly
        // locate the source files.
        handleUncaughtExceptions: false,
        wrapCallSite: wrapCallSite
      });

      // Only enabled by default in development.
      if (process.env.METEOR_SHELL_DIR) {
        require(path.resolve(serverPath, './shell-server.js')).listen(process.env.METEOR_SHELL_DIR);
      }

      // As a replacement to the old keepalives mechanism, check for a running
      // parent every few seconds. Exit if the parent is not running.
      //
      // Two caveats to this strategy:
      // * Doesn't catch the case where the parent is CPU-hogging (but maybe we
      //   don't want to catch that case anyway, since the bundler not yielding
      //   is what caused #2536).
      // * Could be fooled by pid re-use, i.e. if another process comes up and
      //   takes the parent process's place before the child process dies.
      var startCheckForLiveParent = function (parentPid) {
        if (parentPid) {
          if (! bootUtils.validPid(parentPid)) {
            console.error("METEOR_PARENT_PID must be a valid process ID.");
            process.exit(1);
          }

          setInterval(function () {
            try {
              process.kill(parentPid, 0);
            } catch (err) {
              console.error("Parent process is dead! Exiting.");
              process.exit(1);
            }
          }, 3000);
        }
      };


      Fiber(function () {
        _.each(serverJson.load, function (fileInfo) {
          // Modification: Only load packages
          if (fileInfo.path.indexOf('packages/') !== 0) {
            return;
          }

          var code = fs.readFileSync(path.resolve(serverDir, fileInfo.path));
          var nonLocalNodeModulesPaths = [];

          function addNodeModulesPath(path) {
            nonLocalNodeModulesPaths.push(
              files.pathResolve(serverDir, path)
            );
          }

          if (typeof fileInfo.node_modules === "string") {
            addNodeModulesPath(fileInfo.node_modules);
          } else if (fileInfo.node_modules) {
            _.each(fileInfo.node_modules, function (info, path) {
              if (! info.local) {
                addNodeModulesPath(path);
              }
            });
          }

          function statOrNull(path) {
            try {
              return fs.statSync(path);
            } catch (e) {
              return null;
            }
          }

          var Npm = {
            /**
             * @summary Require a package that was specified using
             * `Npm.depends()`.
             * @param  {String} name The name of the package to require.
             * @locus Server
             * @memberOf Npm
             */
            require: function (name) {
              if (nonLocalNodeModulesPaths.length === 0) {
                return require(name);
              }

              var fullPath;

              nonLocalNodeModulesPaths.some(function (nodeModuleBase) {
                var packageBase = files.convertToOSPath(files.pathResolve(
                  nodeModuleBase,
                  name.split("/", 1)[0]
                ));

                if (statOrNull(packageBase)) {
                  return fullPath = files.convertToOSPath(
                    files.pathResolve(nodeModuleBase, name)
                  );
                }
              });

              if (fullPath) {
                return require(fullPath);
              }

              try {
                return require(name);
              } catch (e) {
                // Try to guess the package name so we can print a nice
                // error message
                // fileInfo.path is a standard path, use files.pathSep
                var filePathParts = fileInfo.path.split(files.pathSep);
                var packageName = filePathParts[1].replace(/\.js$/, '');

                // XXX better message
                throw new Error(
                  "Can't find npm module '" + name +
                  "'. Did you forget to call 'Npm.depends' in package.js " +
                  "within the '" + packageName + "' package?");
              }
            }
          };
          var getAsset = function (assetPath, encoding, callback) {
            var fut;
            if (! callback) {
              fut = new Future();
              callback = fut.resolver();
            }
            // This assumes that we've already loaded the meteor package, so meteor
            // itself can't call Assets.get*. (We could change this function so that
            // it doesn't call bindEnvironment if you don't pass a callback if we need
            // to.)
            var _callback = Package.meteor.Meteor.bindEnvironment(function (err, result) {
              if (result && ! encoding)
              // Sadly, this copies in Node 0.10.
                result = new Uint8Array(result);
              callback(err, result);
            }, function (e) {
              console.log("Exception in callback of getAsset", e.stack);
            });

            // Convert a DOS-style path to Unix-style in case the application code was
            // written on Windows.
            assetPath = files.convertToStandardPath(assetPath);

            if (!fileInfo.assets || !_.has(fileInfo.assets, assetPath)) {
              _callback(new Error("Unknown asset: " + assetPath));
            } else {
              var filePath = path.join(serverDir, fileInfo.assets[assetPath]);
              fs.readFile(files.convertToOSPath(filePath), encoding, _callback);
            }
            if (fut)
              return fut.wait();
          };

          var Assets = {
            getText: function (assetPath, callback) {
              return getAsset(assetPath, "utf8", callback);
            },
            getBinary: function (assetPath, callback) {
              return getAsset(assetPath, undefined, callback);
            },
            /**
             * @summary Get the absolute path to the static server asset. Note that assets are read-only.
             * @locus Server [Not in build plugins]
             * @memberOf Assets
             * @param {String} assetPath The path of the asset, relative to the application's `private` subdirectory.
             */
            absoluteFilePath: function (assetPath) {
              if (!fileInfo.assets || !_.has(fileInfo.assets, assetPath)) {
                throw new Error("Unknown asset: " + assetPath);
              }

              assetPath = files.convertToStandardPath(assetPath);
              var filePath = path.join(serverDir, fileInfo.assets[assetPath]);
              return files.convertToOSPath(filePath);
            },
          };

          var isModulesRuntime =
            fileInfo.path === "packages/modules-runtime.js";

          var wrapParts = ["(function(Npm,Assets"];
          if (isModulesRuntime) {
            wrapParts.push(",npmRequire");
          }
          // \n is necessary in case final line is a //-comment
          wrapParts.push("){", code, "\n})");
          var wrapped = wrapParts.join("");

          // It is safer to use the absolute path when source map is present as
          // different tooling, such as node-inspector, can get confused on relative
          // urls.

          // fileInfo.path is a standard path, convert it to OS path to join with
          // __dirname
          var fileInfoOSPath = files.convertToOSPath(fileInfo.path);
          var absoluteFilePath = path.resolve(__dirname, fileInfoOSPath);

          var scriptPath =
            parsedSourceMaps[absoluteFilePath] ? absoluteFilePath : fileInfoOSPath;
          // The final 'true' is an undocumented argument to runIn[Foo]Context that
          // causes it to print out a descriptive error message on parse error. It's
          // what require() uses to generate its errors.
          var func = require('vm').runInThisContext(wrapped, scriptPath, true);
          var args = [Npm, Assets];
          if (isModulesRuntime) {
            args.push(npmRequire);
          }
          func.apply(global, args);
        });

        //// run the user startup hooks.  other calls to startup() during this can still
        //// add hooks to the end.
        //while (__meteor_bootstrap__.startupHooks.length) {
        //  var hook = __meteor_bootstrap__.startupHooks.shift();
        //  hook();
        //}
        //// Setting this to null tells Meteor.startup to call hooks immediately.
        //__meteor_bootstrap__.startupHooks = null;
        //
        //// find and run main()
        //// XXX hack. we should know the package that contains main.
        //var mains = [];
        //var globalMain;
        //if ('main' in global) {
        //  mains.push(main);
        //  globalMain = main;
        //}
        //typeof Package !== 'undefined' && _.each(Package, function (p, n) {
        //  if ('main' in p && p.main !== globalMain) {
        //    mains.push(p.main);
        //  }
        //});
        //if (! mains.length) {
        //  process.stderr.write("Program has no main() function.\n");
        //  process.exit(1);
        //}
        //if (mains.length > 1) {
        //  process.stderr.write("Program has more than one main() function?\n");
        //  process.exit(1);
        //}
        //var exitCode = mains[0].call({}, process.argv.slice(3));
        //// XXX hack, needs a better way to keep alive
        //if (exitCode !== 'DAEMON')
        //  process.exit(exitCode);
        //
        //if (process.env.METEOR_PARENT_PID) {
        //  startCheckForLiveParent(process.env.METEOR_PARENT_PID);
        //}

        process.chdir(appPath);
        wallaby.start();
      }).run();
    },
  };
};

running chimp with multiple meteor apps

what is the best practice to run chimp with multiple meteor apps?
In my case, I am running 3 different meteor apps.

simple scenario:
Given that user clicks in app1 on url link to app2
Then I want to expect some things in app2.

should I rewrite start.js to run multiple meteor apps?

are you leaving meteor?

I have noticed some recent pushes into dev branch.
And I didn't see meteor in there, so I wonder if the dev branch is going to become a master branch in some point of time. Or are you going to maintain 2 versions of this repo with and without meteor?

DDP disconnection issue when calling Meteor.users.remove

Ran into this issue when writing a feature for a user deleting their own account.

When I call the function Meteor.users.remove({_id:user._id}); on the server, chimp throws this error from my cucumber feature:

Then my account should be deleted # tests/features/user-delete.feature:8 Error: Promise was fulfilled but got rejected with the following reason: Error: DDPClient: Disconnected from DDP server at World.<anonymous> (features/step_definitions/domain/Then my account should be deleted.js:5:10)

I've reproduced this issue here so you can have a look.
https://github.com/3VLINC/automated-testing-best-practices

I apologize but I haven't been able to get node-inspector working well with this setup yet so I haven't been able to do much debugging otherwise.

Any insight would be appreciated.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.