|
1 | 1 | var Server = require('../../lib/server') |
2 | 2 | var BundleUtils = require('../../lib/utils/bundle-utils') |
| 3 | +var NetUtils = require('../../lib/utils/net-utils') |
3 | 4 | var BrowserCollection = require('../../lib/browser_collection') |
4 | 5 |
|
5 | 6 | describe('server', () => { |
@@ -105,106 +106,93 @@ describe('server', () => { |
105 | 106 | webServerOnError = null |
106 | 107 | }) |
107 | 108 |
|
108 | | - // ============================================================================ |
109 | | - // server._start() |
110 | | - // ============================================================================ |
111 | | - describe('_start', () => { |
112 | | - it('should compile static resources', (done) => { |
| 109 | + describe('start', () => { |
| 110 | + beforeEach(() => { |
113 | 111 | sinon.spy(BundleUtils, 'bundleResourceIfNotExist') |
| 112 | + sinon.stub(NetUtils, 'getAvailablePort').resolves(9876) |
| 113 | + sinon.stub(server, 'get').withArgs('config').returns({ port: 9876, listenAddress: '127.0.0.1' }) |
| 114 | + }) |
114 | 115 |
|
115 | | - server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneSpy) |
116 | | - |
117 | | - fileListOnResolve().then(() => { |
| 116 | + it('should compile static resources', (done) => { |
| 117 | + server.start().then(() => { |
118 | 118 | expect(BundleUtils.bundleResourceIfNotExist).to.have.been.calledWith('client/main.js', 'static/karma.js') |
119 | 119 | expect(BundleUtils.bundleResourceIfNotExist).to.have.been.calledWith('context/main.js', 'static/context.js') |
120 | 120 | done() |
121 | 121 | }) |
122 | 122 | }) |
123 | 123 |
|
124 | | - it('should start the web server after all files have been preprocessed successfully', (done) => { |
| 124 | + it('should search for available port', (done) => { |
| 125 | + server.start().then(() => { |
| 126 | + expect(NetUtils.getAvailablePort).to.have.been.calledWith(9876, '127.0.0.1') |
| 127 | + done() |
| 128 | + }) |
| 129 | + }) |
| 130 | + }) |
| 131 | + |
| 132 | + // ============================================================================ |
| 133 | + // server._start() |
| 134 | + // ============================================================================ |
| 135 | + describe('_start', () => { |
| 136 | + it('should start the web server after all files have been preprocessed successfully', () => { |
125 | 137 | server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneSpy) |
126 | 138 |
|
127 | 139 | expect(mockFileList.refresh).to.have.been.called |
128 | 140 | expect(fileListOnResolve).not.to.be.null |
129 | 141 | expect(mockWebServer.listen).not.to.have.been.called |
130 | 142 | expect(server._injector.invoke).not.to.have.been.calledWith(mockLauncher.launch, mockLauncher) |
131 | 143 |
|
132 | | - fileListOnResolve().then(() => { |
133 | | - expect(mockWebServer.listen).to.have.been.called |
134 | | - expect(server._injector.invoke).to.have.been.calledWith(mockLauncher.launch, mockLauncher) |
135 | | - done() |
136 | | - }) |
| 144 | + fileListOnResolve() |
| 145 | + expect(mockWebServer.listen).to.have.been.called |
| 146 | + expect(server._injector.invoke).to.have.been.calledWith(mockLauncher.launch, mockLauncher) |
137 | 147 | }) |
138 | 148 |
|
139 | | - it('should start the web server after all files have been preprocessed with an error', (done) => { |
| 149 | + it('should start the web server after all files have been preprocessed with an error', () => { |
140 | 150 | server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneSpy) |
141 | 151 |
|
142 | 152 | expect(mockFileList.refresh).to.have.been.called |
143 | 153 | expect(fileListOnReject).not.to.be.null |
144 | 154 | expect(mockWebServer.listen).not.to.have.been.called |
145 | 155 | expect(server._injector.invoke).not.to.have.been.calledWith(mockLauncher.launch, mockLauncher) |
146 | 156 |
|
147 | | - fileListOnReject().then(() => { |
148 | | - expect(mockWebServer.listen).to.have.been.called |
149 | | - expect(server._injector.invoke).to.have.been.calledWith(mockLauncher.launch, mockLauncher) |
150 | | - done() |
151 | | - }) |
| 157 | + fileListOnReject() |
| 158 | + expect(mockWebServer.listen).to.have.been.called |
| 159 | + expect(server._injector.invoke).to.have.been.calledWith(mockLauncher.launch, mockLauncher) |
152 | 160 | }) |
153 | 161 |
|
154 | | - it('should launch browsers after the web server has started', (done) => { |
| 162 | + it('should launch browsers after the web server has started', () => { |
155 | 163 | server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneSpy) |
156 | 164 |
|
157 | 165 | expect(mockWebServer.listen).not.to.have.been.called |
158 | 166 | expect(server._injector.invoke).not.to.have.been.calledWith(mockLauncher.launch, mockLauncher) |
159 | 167 |
|
160 | | - fileListOnResolve().then(() => { |
161 | | - expect(mockWebServer.listen).to.have.been.called |
162 | | - expect(server._injector.invoke).to.have.been.calledWith(mockLauncher.launch, mockLauncher) |
163 | | - done() |
164 | | - }) |
| 168 | + fileListOnResolve() |
| 169 | + expect(mockWebServer.listen).to.have.been.called |
| 170 | + expect(server._injector.invoke).to.have.been.calledWith(mockLauncher.launch, mockLauncher) |
165 | 171 | }) |
166 | 172 |
|
167 | | - it('should listen on the listenAddress in the config', (done) => { |
| 173 | + it('should listen on the listenAddress in the config', () => { |
168 | 174 | server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneSpy) |
169 | 175 |
|
170 | 176 | expect(mockWebServer.listen).not.to.have.been.called |
171 | 177 | expect(webServerOnError).not.to.be.null |
172 | 178 |
|
173 | 179 | expect(mockConfig.listenAddress).to.be.equal('127.0.0.1') |
174 | 180 |
|
175 | | - fileListOnResolve().then(() => { |
176 | | - expect(mockWebServer.listen).to.have.been.calledWith(9876, '127.0.0.1') |
177 | | - expect(mockConfig.listenAddress).to.be.equal('127.0.0.1') |
178 | | - done() |
179 | | - }) |
180 | | - }) |
181 | | - |
182 | | - it('should try next port if already in use', () => { |
183 | | - server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneSpy) |
184 | | - |
185 | | - expect(mockWebServer.listen).not.to.have.been.called |
186 | | - expect(webServerOnError).not.to.be.null |
187 | | - |
188 | | - expect(mockConfig.port).to.be.equal(9876) |
189 | | - |
190 | | - webServerOnError({code: 'EADDRINUSE'}) |
191 | | - |
192 | | - expect(mockWebServer.listen).to.have.been.calledWith(9877) |
193 | | - expect(mockConfig.port).to.be.equal(9877) |
| 181 | + fileListOnResolve() |
| 182 | + expect(mockWebServer.listen).to.have.been.calledWith(9876, '127.0.0.1') |
| 183 | + expect(mockConfig.listenAddress).to.be.equal('127.0.0.1') |
194 | 184 | }) |
195 | 185 |
|
196 | | - it('should emit a listening event once server begin accepting connections', (done) => { |
| 186 | + it('should emit a listening event once server begin accepting connections', () => { |
197 | 187 | server._start(mockConfig, mockLauncher, null, mockFileList, browserCollection, mockExecutor, doneSpy) |
198 | 188 |
|
199 | 189 | var listening = sinon.spy() |
200 | 190 | server.on('listening', listening) |
201 | 191 |
|
202 | 192 | expect(listening).not.to.have.been.called |
203 | 193 |
|
204 | | - fileListOnResolve().then(() => { |
205 | | - expect(listening).to.have.been.calledWith(9876) |
206 | | - done() |
207 | | - }) |
| 194 | + fileListOnResolve() |
| 195 | + expect(listening).to.have.been.calledWith(9876) |
208 | 196 | }) |
209 | 197 |
|
210 | 198 | it('should emit a browsers_ready event once all the browsers are captured', () => { |
|
0 commit comments