UNPKG

2.07 kBtext/coffeescriptView Raw
1Bluebird = require 'bluebird'
2natural = require 'natural'
3nounInflector = new natural.NounInflector()
4shell = require 'shelljs'
5_ = require 'lodash'
6chai = require 'chai'
7chaiAsPromised = require 'chai-as-promised'
8webdriverio = require 'webdriverio'
9global.X = require './xpath'
10addCustomCommands = require './commands'
11waitServer = require './waitServer'
12
13module.exports = (webdriverConf, customBefore) ->
14 ->
15 chai.Should()
16 chai.use chaiAsPromised
17 chaiAsPromised.transferPromiseness = browser.transferPromiseness
18
19 for groupName, value of webdriverConf.browsers
20 if value in [1, true]
21 global[groupName] = webdriverio.remote webdriverConf
22 else if _.isNumber(value) and value > 0
23 global[groupName] = webdriverio.multiremote do ->
24 res = {}
25 singularName = nounInflector.singularize groupName
26 for i in [0 ... value]
27 res[singularName + i] = webdriverConf
28 res
29 else
30 throw new Error "Wrong number of instances specified for '#{ groupName }' browser group. It must be a number (for multiremote testing) or 'true' (for a single browser)"
31
32 for groupName, value of webdriverConf.browsers
33 addCustomCommands global[groupName]
34
35 Bluebird
36 .resolve()
37 # Clean test DB
38 .then ->
39 dbName = webdriverConf.server.env.MONGO_URL.match(/\/([^\/]*)$/)?[1]
40 shell.exec "mongo #{ dbName } --eval \"db.dropDatabase();\""
41 # Run custom before hook
42 .then ->
43 customBefore?()
44 # Run application
45 .then ->
46 envStr = for key, value of webdriverConf.server.env
47 "#{ key }=#{ value }"
48 envStr = envStr.join ' '
49 shell.exec "#{ envStr } #{ webdriverConf.server.startCommand }", async: true
50 undefined
51 # Wait for server to start
52 .then ->
53 webdriverConf.server.waitServer.req ?=
54 waitServer webdriverConf.server.waitServer
55 .then ->
56 Bluebird.mapSeries Object.keys(webdriverConf.browsers), (groupName) ->
57 global[groupName].init()
58 .timeoutsAsyncScript webdriverConf.waitforTimeout
\No newline at end of file