From 2a44d405819b043653ac4ad4f478a5507787d84f Mon Sep 17 00:00:00 2001 From: Khoa Nguyen Date: Sun, 27 Dec 2015 00:07:34 +0700 Subject: [PATCH] test: Foundation - Switch to Chrome (Phantomjs failed on Audio test) - Downgrage to karma 0.13.15 (https://github.com/karma-runner/karma/issues/1768) - Add Foundation for testing + Use teaspoon for a jQuery-like DOM selector, stateless components wrapper - Tested: + ControlButtons + AudioPlayer (need more love) --- build/karma.conf.js | 15 +- package.json | 8 +- .../AudioPlayer/Buttons/PlayButton.js | 4 +- src/components/AudioPlayer/ControlButtons.js | 12 +- src/components/AudioPlayer/index.js | 9 +- .../AudioPlayer/ControlButtons.spec.js | 328 ++++++++++++++++++ tests/components/AudioPlayer/index.spec.js | 67 ++++ tests/stubs/sounds/accuse.mp3 | Bin 0 -> 18389 bytes tests/stubs/sounds/acne.mp3 | Bin 0 -> 15463 bytes tests/stubs/sounds/amputate.mp3 | Bin 0 -> 17971 bytes wercker.yml | 2 +- 11 files changed, 427 insertions(+), 18 deletions(-) create mode 100644 tests/components/AudioPlayer/ControlButtons.spec.js create mode 100644 tests/components/AudioPlayer/index.spec.js create mode 100644 tests/stubs/sounds/accuse.mp3 create mode 100644 tests/stubs/sounds/acne.mp3 create mode 100644 tests/stubs/sounds/amputate.mp3 diff --git a/build/karma.conf.js b/build/karma.conf.js index f68a23d..54acc93 100644 --- a/build/karma.conf.js +++ b/build/karma.conf.js @@ -8,21 +8,32 @@ debug('Create configuration.') const karmaConfig = { basePath: '../', // project root in relation to bin/karma.js files: [ - './node_modules/phantomjs-polyfill/bind-polyfill.js', + // './node_modules/phantomjs-polyfill/bind-polyfill.js', { pattern: `./${config.dir_test}/**/*.js`, watched: false, served: true, included: true + }, + { + pattern: `./${config.dir_test}/stubs/sounds/*.mp3`, + watched: false, + served: true, + included: false, + nocache: false } ], + proxies: { + '/sounds/': '/base/tests/stubs/sounds/' + }, + hostname: '0.0.0.0', singleRun: !argv.watch, frameworks: ['mocha', 'chai-sinon', 'chai-as-promised', 'chai'], preprocessors: { [`${config.dir_test}/**/*.js`]: ['webpack'] }, reporters: ['spec'], - browsers: ['PhantomJS'], + browsers: ['Chrome'], webpack: { devtool: 'inline-source-map', resolve: webpackConfig.resolve, diff --git a/package.json b/package.json index 006486a..f400219 100644 --- a/package.json +++ b/package.json @@ -78,25 +78,24 @@ "html-loader": "^0.4.0", "html-webpack-plugin": "^1.6.1", "isparta-loader": "^2.0.0", - "karma": "^0.13.16", + "karma": "0.13.15", "karma-chai": "^0.1.0", "karma-chai-as-promised": "^0.1.2", "karma-chai-sinon": "^0.1.5", + "karma-chrome-launcher": "^0.2.2", "karma-coverage": "^0.5.0", "karma-mocha": "^0.2.0", - "karma-phantomjs-launcher": "^0.2.2", "karma-spec-reporter": "0.0.23", "karma-webpack": "^1.7.0", "markdown-loader": "^0.1.7", "mocha": "^2.2.5", "node-sass": "^3.3.3", "parse": "^1.6.13", - "phantomjs": "^1.9.17", - "phantomjs-polyfill": "0.0.1", "postcss-loader": "^0.8.0", "postcss-pxtorem": "^3.1.1", "randomstring": "^1.1.3", "react-addons-test-utils": "^0.14.0", + "react-stateless-wrapper": "^1.0.2", "react-transform-catch-errors": "^1.0.1", "react-transform-hmr": "^1.0.0", "redbox-react": "^1.0.4", @@ -107,6 +106,7 @@ "sinon": "^1.17.2", "sinon-chai": "^2.8.0", "style-loader": "^0.13.0", + "teaspoon": "^5.0.1", "url-loader": "^0.5.6", "webpack": "^1.12.9", "webpack-dev-middleware": "^1.4.0", diff --git a/src/components/AudioPlayer/Buttons/PlayButton.js b/src/components/AudioPlayer/Buttons/PlayButton.js index f116108..c5415ac 100644 --- a/src/components/AudioPlayer/Buttons/PlayButton.js +++ b/src/components/AudioPlayer/Buttons/PlayButton.js @@ -13,7 +13,7 @@ const PlayButton = (props) => { onClick={props.onClick} className='player-btn' title='Play/Pause' - disabled={!props.disable} + disabled={props.disabled} > @@ -23,7 +23,7 @@ const PlayButton = (props) => { PlayButton.propTypes = { onClick: PropTypes.func.isRequired, isPlaying: PropTypes.bool.isRequired, - disable: PropTypes.bool.isRequired + disabled: PropTypes.bool.isRequired } export default PlayButton diff --git a/src/components/AudioPlayer/ControlButtons.js b/src/components/AudioPlayer/ControlButtons.js index e1d8b0c..6455f68 100644 --- a/src/components/AudioPlayer/ControlButtons.js +++ b/src/components/AudioPlayer/ControlButtons.js @@ -10,7 +10,13 @@ class ControlButtons extends React.Component { render () { const props = this.props - const show = props.buttons + let show = props.buttons + // Show PlayButton when none given + if (show === undefined || show === null) { + show = { + PlayButton: true + } + } return (
@@ -22,7 +28,7 @@ class ControlButtons extends React.Component { } {show.MuteButton && @@ -44,7 +50,7 @@ class ControlButtons extends React.Component { } ControlButtons.propTypes = { - buttons: PropTypes.object.isRequired, + buttons: PropTypes.object, isLoading: PropTypes.bool.isRequired, isPlaying: PropTypes.bool.isRequired, mute: PropTypes.bool.isRequired, diff --git a/src/components/AudioPlayer/index.js b/src/components/AudioPlayer/index.js index 81dda43..56c2c21 100644 --- a/src/components/AudioPlayer/index.js +++ b/src/components/AudioPlayer/index.js @@ -29,7 +29,8 @@ class AudioPlayer extends React.Component { actionUpdateSeek: PropTypes.func.isRequired, onPlay: PropTypes.func.isRequired, onEnd: PropTypes.func.isRequired, - onLoad: PropTypes.func.isRequired + onLoad: PropTypes.func.isRequired, + onLoadError: PropTypes.func.isRequired } componentDidMount () { @@ -52,7 +53,7 @@ class AudioPlayer extends React.Component { onend: this.onEnd, onplay: this.onPlay, onload: props.onLoad, - onloaderror: this.onLoadError + onloaderror: props.onLoadError() }) } @@ -77,10 +78,6 @@ class AudioPlayer extends React.Component { this.stop() } - onLoadError = (id, message) => { - throw new Error(message) - } - tick () { this.stop() this._interval = setInterval(() => { diff --git a/tests/components/AudioPlayer/ControlButtons.spec.js b/tests/components/AudioPlayer/ControlButtons.spec.js new file mode 100644 index 0000000..ab70e80 --- /dev/null +++ b/tests/components/AudioPlayer/ControlButtons.spec.js @@ -0,0 +1,328 @@ +import React from 'react' +import TestUtils from 'react-addons-test-utils' +import { bindActionCreators } from 'redux' +import ControlButtons from 'components/AudioPlayer/ControlButtons' +import PlayButton from 'components/AudioPlayer/Buttons/PlayButton' +import MuteButton from 'components/AudioPlayer/Buttons/MuteButton' +import LoopButton from 'components/AudioPlayer/Buttons/LoopButton' +import LoadingButton from 'components/AudioPlayer/Buttons/LoadingButton' +import $ from 'teaspoon' + +function shallowRender (component) { + const renderer = TestUtils.createRenderer() + + renderer.render(component) + return renderer.getRenderOutput() +} + +function renderWithProps (props = {}) { + return $().render() +} + +function shallowRenderWithProps (props = {}) { + return shallowRender() +} + +describe('(Component) AudioPlayer -> ControlButtons', function () { + let _component, $root, _props, _spies + + beforeEach(function () { + _spies = {} + _props = { + buttons: { + 'LoadingButton': true, + 'PlayButton': true, + 'MuteButton': true, + 'LoopButton': false + }, + isLoading: true, + isPlaying: true, + mute: true, + loop: true, + canUserToggleAudio: true, + ...bindActionCreators({ + playButtonAction: (_spies.playButtonAction = sinon.spy()), + loopButtonAction: (_spies.loopButtonAction = sinon.spy()), + muteButtonAction: (_spies.muteButtonAction = sinon.spy()) + }, _spies.dispatch = sinon.spy()) + } + + _component = shallowRenderWithProps(_props) + $root = renderWithProps(_props) + }) + + it('Should render as a
.', function () { + expect(_component.type).to.equal('div') + }) + + it('Should be rendered', function () { + expect($root).to.be.ok + }) + + it('Should render as a
with class `player-control-wrapper`.', function () { + const div = $root.find('div.player-control-wrapper').length + expect(div).to.equal(1) + }) + + it('Should have a
with class `player-buttons`.', function () { + const div = $root.find('div.player-buttons').length + expect(div).to.equal(1) + }) + + it('Should render the given buttons when specify all buttons visibility', function () { + $root = renderWithProps({ + ..._props, + buttons: { + 'LoadingButton': true, + 'PlayButton': true, + 'MuteButton': true, + 'LoopButton': false + } + }) + + const $loading = $root.find(LoadingButton).length + expect($loading).to.equal(1) + + const $play = $root.find(PlayButton).length + expect($play).to.equal(1) + + const $loop = $root.find(LoopButton).length + expect($loop).to.equal(0) + + const $mute = $root.find(MuteButton).length + expect($mute).to.equal(1) + }) + + it('Should render play buttons when non buttons given', function () { + $root = renderWithProps({ + ..._props, + buttons: undefined + }) + + const $play = $root.find(PlayButton).length + expect($play).to.equal(1) + }) + + describe('Play button', () => { + let $root + beforeEach(() => { + _props = { + ..._props, + buttons: { + PlayButton: true + } + } + + $root = renderWithProps({ + ..._props + }) + }) + + it('Should have a title', () => { + const $btn = $root.find(PlayButton).find('button[title="Play/Pause"]') + expect($btn.length).to.equal(1) + }) + + it('Should be disabled when canUserToggleAudio=true', () => { + $root = renderWithProps({ + ..._props, + canUserToggleAudio: false + }) + const $play = $root.find(PlayButton) + expect($play.length).to.equal(1) + + const $btn = $play.find('button[disabled]') + expect($btn.length).to.equal(1) + }) + + it('Should show play icon when isPlaying=false', () => { + $root = renderWithProps({ + ..._props, + isPlaying: false + }) + + const $play = $root.find(PlayButton) + expect($play.length).to.equal(1) + + const $btn = $play.find('button > i.fa-play') + expect($btn.length).to.equal(1) + }) + + it('Should show pause icon when isPlaying=true', () => { + $root = renderWithProps({ + ..._props, + isPlaying: true + }) + + const $play = $root.find(PlayButton) + expect($play.length).to.equal(1) + + const $btn = $play.find('button > i.fa-pause') + expect($btn.length).to.equal(1) + }) + + it('Should dispatch an action when clicked', () => { + const $btn = $root.find(PlayButton).find('button') + expect($btn.length).to.equal(1) + + _spies.playButtonAction.should.have.not.been.called + $btn.trigger('click') + _spies.playButtonAction.should.have.been.called + }) + }) + + describe('Mute button', () => { + let $root + beforeEach(() => { + _props = { + ..._props, + buttons: { + MuteButton: true + } + } + + $root = renderWithProps({ + ..._props + }) + }) + + it('Should have a title', () => { + const $btn = $root.find(MuteButton).find('button[title="Mute/Unmute"]') + expect($btn.length).to.equal(1) + }) + + it('Should have volume up icon when mute=false', () => { + $root = renderWithProps({ + ..._props, + mute: false + }) + + const $btn = $root.find(MuteButton).find('button > i.fa-volume-up') + expect($btn.length).to.equal(1) + }) + + it('Should have volume off icon when mute=true', () => { + $root = renderWithProps({ + ..._props, + mute: true + }) + + const $btn = $root.find(MuteButton).find('button > i.fa-volume-off') + expect($btn.length).to.equal(1) + }) + + it('Should dispatch an action when clicked', () => { + const $btn = $root.find(MuteButton).find('button') + + _spies.muteButtonAction.should.have.not.been.called + $btn.trigger('click') + _spies.muteButtonAction.should.have.been.called + }) + }) + + describe('Loop button', () => { + let $root + + beforeEach(() => { + _props = { + ..._props, + buttons: { + LoopButton: true + } + } + + $root = renderWithProps({ + ..._props + }) + }) + + it('Should have a title', () => { + const $btn = $root.find(LoopButton).find('button[title="Repeat"]') + expect($btn.length).to.equal(1) + }) + + it('Should have repeat icon', () => { + const $btn = $root.find(LoopButton).find('button > i.fa-repeat') + expect($btn.length).to.equal(1) + }) + + it('Should have proper className', () => { + const $btn = $root.find(LoopButton).find('button.player-btn') + expect($btn.length).to.equal(1) + + const $btn2 = $root.find(LoopButton).find('button.loop') + expect($btn.length).to.equal(1) + }) + + it('Should have have active class when loop=true', () => { + $root = renderWithProps({ + ..._props, + loop: true + }) + + const $btn = $root.find(LoopButton).find('button.active') + expect($btn.length).to.equal(1) + }) + + it('Should not have have active class loop=false', () => { + $root = renderWithProps({ + ..._props, + loop: false + }) + + const $btn = $root.find(LoopButton).find('button.active') + expect($btn.length).to.equal(0) + }) + + it('Should dispatch an action when clicked', () => { + const $btn = $root.find(LoopButton).find('button') + + _spies.loopButtonAction.should.have.not.been.called + $btn.trigger('click') + _spies.loopButtonAction.should.have.been.called + }) + }) + + describe('Loading button', () => { + let $root + + beforeEach(() => { + _props = { + ..._props, + buttons: { + LoadingButton: true + } + } + + $root = renderWithProps({ + ..._props + }) + }) + + it('Should exits', () => { + const $btn = $root.find(LoadingButton) + expect($btn.length).to.equal(1) + }) + + it('Should have a title', () => { + const $btn = $root.find(LoadingButton).find('button[title="Loading"]') + expect($btn.length).to.equal(1) + }) + + it('Should have proper className', () => { + const $btn = $root.find(LoadingButton).find('button') + expect($btn.length).to.equal(1) + + const $i = $btn.find('i[class="fa-circle-o-notch"][class="fa-spin"]') + expect($btn.length).to.equal(1) + }) + + it('Should NOT dispatch an action when clicked', () => { + const $btn = $root.find(LoadingButton).find('button') + + _spies.dispatch.should.have.not.been.called + $btn.trigger('click') + _spies.dispatch.should.have.not.been.called + }) + }) +}) diff --git a/tests/components/AudioPlayer/index.spec.js b/tests/components/AudioPlayer/index.spec.js new file mode 100644 index 0000000..eea9e50 --- /dev/null +++ b/tests/components/AudioPlayer/index.spec.js @@ -0,0 +1,67 @@ +import React from 'react' +import TestUtils from 'react-addons-test-utils' +import { bindActionCreators } from 'redux' +import AudioPlayer from 'components/AudioPlayer' +import $ from 'teaspoon' + +function renderWithProps (props = {}) { + return $().render() +} + +describe('(Component) AudioPlayer', function () { + let $root, _props, _spies, $btn + + beforeEach(() => { + _spies = {} + _props = { + song: '/sounds/accuse.mp3', + autoplay: true, + mute: false, + loop: false, + seek: 0, + buttons: { + 'LoadingButton': true, + 'PlayButton': true, + 'MuteButton': true, + 'LoopButton': false + }, + isPlaying: false, + isLoading: true, + canUserToggleAudio: true, + ...bindActionCreators({ + actionToggle: (_spies.actionToggle = sinon.spy()), + actionToggleMute: (_spies.actionToggleMute = sinon.spy()), + actionToggleLoop: (_spies.actionToggleLoop = sinon.spy()), + actionUpdateSeek: (_spies.actionUpdateSeek = sinon.spy()), + onPlay: (_spies.onPlay = sinon.spy()), + onEnd: (_spies.onEnd = sinon.spy()), + onLoad: (_spies.onLoad = sinon.spy()), + onLoadError: (_spies.onLoadError = sinon.spy()) + }, _spies.dispatch = sinon.spy()) + } + $root = renderWithProps(_props) + }) + + it('Should be rendered', function () { + expect($root).to.be.ok + }) + + it('Should render as an div', function () { + $().shallowRender().is('div') + }) + + it('Should trigger action when click on Play/Pause button', () => { + $btn = $root.find('button.player-btn[title="Play/Pause"]') + expect($btn.length).to.equal(1) + + _spies.actionToggle.should.have.not.been.called + $btn.trigger('click') + _spies.actionToggle.should.have.been.called + }) + + it('Should autoplay') + it('Should call onLoadError when provide a broken file') + it('Should call onPlay') + it('Should call onEnd') + it('Should update progress bar') +}) diff --git a/tests/stubs/sounds/accuse.mp3 b/tests/stubs/sounds/accuse.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..a635a24ec85aeb0d950563fe4b49e33ff5adbae7 GIT binary patch literal 18389 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

nY|0_&1X6-s)@V;| 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 P4$u=xP*jX^1~vo$-bilk literal 0 HcmV?d00001 diff --git a/tests/stubs/sounds/acne.mp3 b/tests/stubs/sounds/acne.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..f0ce41e56b4fe620de504c28f2d8514a902c8f56 GIT binary patch literal 15463 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