Skip to content
This repository has been archived by the owner on Dec 27, 2018. It is now read-only.

Add coverage support to spacejam #59

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions lib/Meteor.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,12 @@ class Meteor extends EventEmitter
else
delete env.MONGO_URL if env.MONGO_URL?

if @options["coverage"]?
env.COVERAGE = "1"
env.COVERAGE_APP_FOLDER = path.join(cwd, './')
if @options["loglevel"]?
env.COVERAGE_VERBOSE = "1"

options = {
cwd: cwd,
env: env,
Expand Down
9 changes: 9 additions & 0 deletions lib/Spacejam.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,15 @@ class Spacejam extends EventEmitter
expect(@meteor, "Meteor is already running").to.be.null

@options = _.extend @defaultOptions(), options
if @options.coverage? && @options.coverage
@options['phantomjs-script'] = "phantomjs-test-in-console-with-coverage.js";
if @options.coverage.length > 0
process.env.COVERAGE_IN_COVERAGE = @options.coverage.indexOf('in_coverage') > -1 ? true : false;
process.env.COVERAGE_OUT_COVERAGE = @options.coverage.indexOf('out_coverage') > -1 ? true : false;
process.env.COVERAGE_OUT_LCOVONLY = @options.coverage.indexOf('out_lcovonly') > -1 ? true : false;
else
log.warn "No coverage action activated. Try spacejam [...] --coverage='out_lcovonly'"

log.debug @options

try
Expand Down
130 changes: 130 additions & 0 deletions lib/phantomjs-test-in-console-with-coverage.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
page = require('webpage').create()
system = require('system')
env = system.env;

console.log("phantomjs: Running tests at #{system.env.ROOT_URL} using test-in-console and coverage")

page.onConsoleMessage = (message) ->
console.log(message)

page.open(system.env.ROOT_URL)

page.onError = (msg, trace) ->

mochaIsRunning = page.evaluate ->
return window.mochaIsRunning

# Mocha will handle and report the uncaught errors for us
if mochaIsRunning
return

console.log("phantomjs: #{msg}")

trace.forEach((item) ->
console.log(" #{item.file}: #{item.line}")
)
phantom.exit(6)

page.onCallback = (data) ->
## Callback when sending and saving coverage
if data && data.err
console.log("coverage error: #{data.err}")
phantom.exit(7)
else
phantom.exit(0)


checkingStatus = setInterval ->
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Quite a lot of cyclomatic complexity here.

done = page.evaluate ->
return TEST_STATUS.DONE if TEST_STATUS?
return DONE if DONE?
return false

if done
failures = page.evaluate ->
return TEST_STATUS.FAILURES if TEST_STATUS?
return FAILURES if FAILURES?
return false
if failures
phantom.exit(2)
else
## tests are ok, we remove the timer that checks if test are done
clearInterval checkingStatus
try
## Execute coverage actions
importCoverageDump = env.COVERAGE_IN_COVERAGE == "true"
exportCoverageDump = env.COVERAGE_OUT_COVERAGE == "true"
exportLcovonly = env.COVERAGE_OUT_LCOVONLY == "true"
page.evaluate runCoverage, importCoverageDump, exportCoverageDump, exportLcovonly
catch error
window.callPhantom
err: error
, 500

runCoverage = (importCoverageDump, exportCoverageDump, exportLcovonly) ->
## Define coverage services
window.assertCoverageEnabled = (onSuccess) ->
if ! Package || ! Package['meteor'] || ! Package['meteor']['Meteor'] || ! Package['meteor']['Meteor'].sendCoverage || ! Package['meteor']['Meteor'].exportCoverage
window.callPhantom
err: "Coverage package missing or not correclty launched"
else
onSuccess();
window.saveClientSideCoverage = (onSuccess) ->
Package['meteor']['Meteor'].sendCoverage (stats,err) ->
console.log("tests are ok and some js on the client side have been covered. Report: ", JSON.stringify(stats))
if err
window.callPhantom
err: "Failed to send client coverage"
else
onSuccess();

window.exportLcovonly = (onSuccess) ->
Package['meteor']['Meteor'].exportCoverage 'lcovonly', (err) ->
if err
window.callPhantom
err: "Failed to save lcovonly coverage"
else
onSuccess();

window.exportCoverageDump = (onSuccess) ->
Package['meteor']['Meteor'].exportCoverage 'coverage', (err) ->
if err
window.callPhantom
err: "Failed to save coverage dump"
else
onSuccess();

window.importCoverageDump = (onSuccess) ->
Package['meteor']['Meteor'].importCoverage (err) ->
if err
window.callPhantom
err: "Failed to import coverage dump"
else
onSuccess();

## Execute desired tasks

window.assertCoverageEnabled(->
window.saveClientSideCoverage(->
stepFurtherImportCoverageDump = ->
stepFurtherExportCoverageDump = ->
if exportLcovonly
window.exportLcovonly(->
window.callPhantom
success: "true"
);
else
window.callPhantom
success: "true"

if exportCoverageDump
window.exportCoverageDump stepFurtherExportCoverageDump
else
stepFurtherExportCoverageDump()

if importCoverageDump
window.importCoverageDump stepFurtherImportCoverageDump
else
stepFurtherImportCoverageDump()
);
);
171 changes: 171 additions & 0 deletions lib/phantomjs-test-in-console-with-coverage.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.