Skip to content

Commit 34e6368

Browse files
committed
module test
1 parent e79ad36 commit 34e6368

4 files changed

Lines changed: 122 additions & 3 deletions

File tree

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@
4141
"jest-cli": "^0.9.2",
4242
"karma": "~0.13.22",
4343
"karma-chai": "~0.1.0",
44-
"karma-chrome-launcher": "~0.2.3",
4544
"karma-mocha": "~0.2.2",
4645
"karma-mocha-reporter": "~2.0.0",
4746
"karma-phantomjs-launcher": "~1.0.0",

src/utils.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ export const series = (...tasks) => (each) => (cb) => {
6363
const key = nextKey.next()
6464
let thunk = tasks[key]
6565
if (Array.isArray(thunk)) thunk = parallel.apply(null, thunk).call(null, each)
66-
return [ key, thunk ]
66+
return [ +key, thunk ] // convert `key` to number
6767
}
6868
let key, thunk
6969
let next = nextThunk()

test/index.spec.js

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
const ReactTestUtils = require('react-addons-test-utils')
2+
const React = require('react')
3+
const AsyncScriptLoader = require('../src').default
4+
5+
class TestComponent extends React.Component {
6+
render () {
7+
return <div></div>
8+
}
9+
}
10+
11+
function renderTestComponent (deps, onScriptLoaded) {
12+
const MockedComponent = AsyncScriptLoader.apply(null, deps)(TestComponent)
13+
const result = ReactTestUtils.renderIntoDocument(<MockedComponent onScriptLoaded={onScriptLoaded} />)
14+
15+
return ReactTestUtils.findRenderedComponentWithType(result, TestComponent)
16+
}
17+
18+
function checkScriptLoaded (getComponent, done) {
19+
return _ => {
20+
const com = getComponent()
21+
console.log(com)
22+
23+
expect(com.props.isScriptLoaded).to.be.true
24+
expect(com.props.isScriptLoadSucceed).to.be.true
25+
26+
done()
27+
}
28+
}
29+
30+
describe('Test this module', _ => {
31+
it('[react-async-script-loader] Load external script after component mounted',
32+
function (done) {
33+
const deps = [ '//cdn.bootcss.com/jquery/2.2.1/jquery.min.js' ]
34+
const com = renderTestComponent(deps, onScriptLoaded)
35+
36+
// check script tags
37+
deps.forEach(testScript => {
38+
const tag = document.querySelector(`script[src='${testScript}']`)
39+
expect(tag).to.be.exist
40+
})
41+
42+
// check component props before loading
43+
expect(com.props.isScriptLoaded).to.be.false
44+
expect(com.props.isScriptLoadSucceed).to.be.false
45+
46+
function onScriptLoaded () {
47+
expect(com.props.isScriptLoaded).to.be.true
48+
expect(com.props.isScriptLoadSucceed).to.be.true
49+
50+
done()
51+
}
52+
}
53+
)
54+
55+
it('[react-async-script-loader] No redundant script tag will be appended',
56+
function (done) {
57+
const deps = [ '//cdn.bootcss.com/jquery/2.2.1/jquery.min.js' ]
58+
const com0 = renderTestComponent(deps, checkScriptLoaded(_ => com0, checkAllDone))
59+
const com1 = renderTestComponent(deps, checkScriptLoaded(_ => com1, checkAllDone))
60+
let count = 0
61+
62+
// check script tags
63+
deps.forEach(testScript => {
64+
const tags = document.querySelectorAll(`script[src='${testScript}']`)
65+
expect(tags.length).to.equal(1)
66+
})
67+
68+
function checkAllDone () {
69+
count ++
70+
if (count == 2) done()
71+
}
72+
}
73+
)
74+
})

test/utils.spec.js

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,65 @@
11
const { newScript, parallel, series } = require('../src/utils')
22

33
describe('Test util functions', _ => {
4+
const testTask = v => cb => setTimeout(_ => cb(null, v), 100)
5+
const taskBundle = [1, 2, 3, 4, 5].map(testTask)
46

57
it('[utils/newScript] A thunk task, append new script tag', function (done) {
68
const testScript = '//cdn.bootcss.com/jquery/2.2.1/jquery.min.js'
79
const task = newScript(testScript)
810

9-
task(function (err, src) {
11+
// start task
12+
task((err, src) => {
1013
const tag = document.querySelector(`script[src='${testScript}']`)
1114

15+
// assert
1216
expect(err).to.not.exist
1317
expect(src).to.equal(testScript)
1418
expect(tag).to.exist
1519

1620
done()
1721
})
1822
})
23+
24+
it('[utils/parallel] Run thunk task in parallel mode', function (done) {
25+
const startTime = Date.now()
26+
27+
parallel.apply(null, taskBundle)((err, val, i) => {
28+
// assert for iteration
29+
expect(err).to.not.exist
30+
expect(val).to.equal(i + 1)
31+
})((err, ret) => {
32+
const finishTime = Date.now()
33+
const delta = finishTime - startTime
34+
35+
// assert for success callback
36+
expect(err).to.not.exist
37+
expect(ret).to.eql([1, 2, 3, 4, 5])
38+
// check execute time, parallel mode would take about >100, <200 ms
39+
expect(delta).to.be.below(200)
40+
41+
done()
42+
})
43+
})
44+
45+
it('[utils/series] Run thunk task in series mode', function (done) {
46+
const startTime = Date.now()
47+
48+
series.apply(null, taskBundle)((err, val, i) => {
49+
// assert for iteration
50+
expect(err).to.not.exist
51+
expect(val).to.equal(i + 1)
52+
})((err, ret) => {
53+
const finishTime = Date.now()
54+
const delta = finishTime - startTime
55+
56+
// assert for success callback
57+
expect(err).to.not.exist
58+
expect(ret).to.eql([1, 2, 3, 4, 5])
59+
// check execute time, series mode would >500 ms
60+
expect(delta).to.be.above(500)
61+
62+
done()
63+
})
64+
})
1965
})

0 commit comments

Comments
 (0)