neft
Version:
Universal Platform
82 lines (68 loc) • 2.6 kB
text/coffeescript
fs = require 'fs'
testsFile = require '../cli/testsFile'
config = require '../cli/config'
childProcess = require 'child_process'
pathUtils = require 'path'
nodeEnv = require './node'
nvmEnv = require './nvm'
{log} = Neft
TARGET = 'npm'
PROCESS_OPTIONS =
silent: true
PACKAGE_FILENAME = do ->
packageFile = require fs.realpathSync './package.json'
"#{packageFile.name}-#{packageFile.version}.tgz"
getInitPath = ->
pathUtils.join __dirname, './local/initFile.js'
buildProject = (logsReader, callback) ->
logsReader.log "creating npm package"
childProcess.exec 'npm pack', (err) ->
if err
return callback err
logsReader.log "npm package created"
callback null
installProjectOnNode = (env, logsReader, callback) ->
logsReader.log "installing npm package"
cmd = "npm install #{PACKAGE_FILENAME}"
if env.global
cmd += " -g"
childProcess.exec cmd, (err, stdout, stderr) ->
log.error stderr
log stdout
fs.unlinkSync PACKAGE_FILENAME
logsReader.log "npm package installed"
callback null
installProjectOnNvm = (env, logsReader, callback) ->
logsReader.log "installing npm package on nvm"
cmd = "npm install #{PACKAGE_FILENAME}"
if env.global
cmd += " -g"
nvmEnv.execCommand env.nodeVersion, cmd, null, (err) ->
fs.unlinkSync PACKAGE_FILENAME
logsReader.log "npm package on nvm installed"
callback null
runTestsInNodeProcess = (env, logsReader, callback) ->
logsReader.log 'running npm tests'
nodeEnv.execFile getInitPath(), logsReader, (err) ->
logsReader.log 'npm tests terminated'
callback err
runTestsInNvmProcess = (env, logsReader, callback) ->
{nodeVersion} = env
log.info "running npm tests on nvm using node #{nodeVersion}"
nvmEnv.execCommand nodeVersion, "node #{getInitPath()}", logsReader, (err) ->
log.info "npm tests on nvm using node #{nodeVersion} terminated"
callback err
exports.getName = (env) ->
"NVM tests on #{env.nodeVersion} Node"
exports.run = (env, logsReader, callback) ->
useNvm = env.nodeVersion isnt 'current'
installProject = if useNvm then installProjectOnNvm else installProjectOnNode
runTestsInProcess = if useNvm then runTestsInNvmProcess else runTestsInNodeProcess
buildProject logsReader, (err) ->
if err
return callback err
installProject env, logsReader, (err) ->
if err
return callback err
runTestsInProcess env, logsReader, callback