UNPKG

mocha-extjs

Version:
245 lines (191 loc) 8.53 kB
# mocha-extjs [![npm](https://img.shields.io/npm/dt/mocha-extjs.svg?maxAge=86400)](https://www.npmjs.com/package/mocha-extjs) [![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](http://standardjs.com/) [![GitHub license](https://img.shields.io/github/license/antonfisher/node-mocha-extjs.svg)](https://github.com/antonfisher/node-mocha-extjs/blob/master/LICENSE) ![status](https://img.shields.io/badge/status-alpha-lightgray.svg) ExtJs applications testing framework which simulates user actions. [Online demo](http://antonfisher.com/demo/mocha-extjs/) ![Demo](https://raw.githubusercontent.com/antonfisher/node-mocha-extjs/docs/images/mocha-extjs-v1.gif) Component search by _title_, _fieldLabel_, _reference_, _boxLabel_, _xtype_, _text_ properties: ```javascript // click on "Save" button eTT().button('Save').click(done); // select first item in the combobox with "Country" fieldLabel. eTT().combobox('Country').select(1, done); ``` ## Getting Started: Update _index.html_: ```html <body> ... <!-- mocha ui --> <div id="mocha"></div> <!-- mocha library --> <link href="http://cdn.rawgit.com/mochajs/mocha/2.3.0/mocha.css" rel="stylesheet"/> <script src="http://cdn.rawgit.com/Automattic/expect.js/0.3.1/index.js"></script> <script src="http://cdn.rawgit.com/mochajs/mocha/2.3.0/mocha.js"></script> <!-- mocha-extjs library --> <link href="https://cdn.rawgit.com/antonfisher/node-mocha-extjs/master/dist/mocha-extjs.css" rel="stylesheet" /> <script src="https://cdn.rawgit.com/antonfisher/node-mocha-extjs/master/dist/mocha-extjs.js"></script> <!-- setup mocha --> <script> mocha.setup('bdd'); </script> <!-- first test suite --> <script src="https://cdn.rawgit.com/antonfisher/node-mocha-extjs/master/test/suites/010-environment.js"></script> <!-- run script --> <script> mocha.checkLeaks(); mocha.globals(['Ext', 'Sandbox']); // update name here! var eTT = new MochaExtJs(); // init testing framework window.onload = function () { setTimeout(function () { mocha.run(); }, 1000); }; </script> </body> ``` Done. Run your application! ## PhantomJs It works now, but some hack is needed. First of all you will need _PhantonJs_ version 2 and `mocha-phantomjs` library. After `mocha-phantomjs` installation, upgrade one of its dependency to the latest version: ```bash $ npm install mocha-phantomjs@4.0.2 mocha-phantomjs-core@2.0.1 phantomjs-prebuilt@2.1.7 $ rm -rf ./node_modules/mocha-phantomjs/node_modules/mocha-phantomjs-core # check PhantonJs version, should be like this: $ ./node_modules/.bin/phantomjs --version 2.1.1 ``` Run tests in console: ```bash # http://localhost:3000 - application address $ ./node_modules/.bin/mocha-phantomjs --timeout 15000 --path ./node_modules/.bin/phantomjs --setting disk-cache=false --view 1024x768 http://localhost:3000 ``` Library's self test with _PhantonJs_: ```bash $ npm test ``` ## Usage ### Init the library before running MochaJs ```javascript var eTT = new MochaExtJs(); // init testing framework ``` ### Add test suite: ```javascript // tests/suites/020-buttons.js describe('Buttons', function () { this.bail(true); // exit when first test fails this.timeout(20 * 1000); // necessary timeout for ui operations it('Switch to "Buttons" tab', function (done) { // done - async tests callback eTT().tab('Buttons').click(done); }); it('Click "Simple button" button', function (done) { eTT().button('Simple button').isEnabled().click(done); }); }); ``` ### Supported components and methods: ``` var eTT = new MochaExtJs(); eTT() -->--->|------->--->|- button ---> (|- '%title%' )----. | | | |- window |- '%fieldLabel%' | | |- no --' |- numberfield |- '%reference%' | | | |- textfield |- '%boxLabel%' | | | |- checkbox |- '%xtype%' | | | |- combobox `- '%text%' | | | |- dataview | | | |- radio | | | |- grid .----------------------x----------------------. | | `- tab | | | | |-->|- click -------> (...) ------------------v | | | |- isEnabled | | |- waitLoadMask() ------. | |- isDisabled | | | | | |- isHidden | | `- waitText('%text%')---v | |- isVisible | | | | |- select | | | | |- checkRowsCount | | | | |- clickAction | | | | |- edit | | | | `- fill | | | | | | | `--> cellEditor() --->|- select ---> (...) ---v | | |- click | | | `- fill | | | | x----------------------------<-------------------------------------------------' | | `--> done. ``` Examples: ```javascript eTT().button('Simple button').isEnabled().click(done); eTT().button('Hide me').click().isHidden(done); eTT().tab('Windows').click(done); eTT().window('Confirm').button('Yes').isEnabled().click(done); eTT().no.window('Confirm', done); eTT().textfield('Name').fill('my text', done); eTT().numberfield('Count').fill(13, done); eTT().checkbox('include').click(done); eTT().radio('check B').click(done); eTT().combobox('Select in list').select(1, done); eTT().grid('Names').select(1, 1, done); eTT().grid('Names').checkRowsCount(2, done); eTT().grid('Names').clickAction(0, 2, 1, done); // row, coll, action index eTT().grid('Cell editing').cellEditor(1, 0).select(0, done); eTT().grid('Cell editing').cellEditor(0, 2).fill('test1', done); eTT().grid('Cell editing').cellEditor(0, 3).click(done); eTT().grid('customDataviewReference').select(1, done); eTT().waitLoadMask(done); eTT().waitText('Result is here!', done); ``` ### Taking screenshots ```javascript MochaExtJs.screenshot(); MochaExtJs.screenshot('./mypath/'); ``` ## Installation - `$ npm install mocha-extjs` - use files from `./dist` folder. ## Development - install _NodeJs v5.10.1_ or newer - clone repository `$ git clone https://github.com/antonfisher/node-mocha-extjs.git` - copy _ExtJs v5_ or _v6_ framework to `./test/sandbox/ext` folder - build _Sandbox_ application ```bash $ cd ./node-mocha-extjs/test/sandbox $ sencha app build ``` - install dependencies `$ npm install` - run _lint_: `$ npm run lint` - run _gulp_: `$ npm start`. ## Contributing Please take care to maintain the existing coding style, tests for any changed functionality. `npm test` and `npm run lint` your code. Push your changes without `./dist/mocha-extjs.*` files, to keep commits cleaner between library releases. Thank you! ## Releases History * 0.2.0 New grid method - clickAction * 0.1.7 Move to _PhantomJs v2_, _ExtJs v6_, add _DataView_ support (thanks [@vadimpopa](https://github.com/antonfisher/node-mocha-extjs/pull/1)) * 0.1.6 _CellEditing_ plugin support in _PhantomJs_ * 0.1.5 Update click method, minor fixes * 0.1.4 New grid cell editor methods * 0.1.3 Fix previous release trouble * 0.1.2 Update documentation * ES2015 * standardjs * grid select rows and cells * 0.1.1 Update documentation * 0.1.0 Initial Alpha release ## ToDo - [x] update Mocha UI style - [x] Self tests - [ ] Migrate to WebPack - [ ] Use Sencha test env - [ ] New components - [ ] Documentation ## License Copyright (c) 2016 Anton Fisher <a.fschr@gmail.com> MIT License. Free use and change.