Skip to content

Commit c6ff195

Browse files
author
Eric Wendelin
committed
Add Karma for testing.
1 parent 3ae6650 commit c6ff195

File tree

6 files changed

+215
-36
lines changed

6 files changed

+215
-36
lines changed

Makefile

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,29 @@
1-
BROWSER_PATH="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
1+
BROWSERS=Firefox,ChromeCanary,Opera,Safari
22

3-
deploy:
4-
npm publish
3+
test: build/jshint.xml
4+
@NODE_ENV=test ./node_modules/karma/bin/karma start --single-run --browsers $(BROWSERS)
55

6-
browser:
7-
open spec/spec-runner.html
6+
build/jshint.xml: build
7+
./node_modules/.bin/jshint --reporter checkstyle ./spec/stacktrace-spec.js ./stacktrace.js > build/jshint.xml
88

9-
phantom:
10-
/usr/bin/env DISPLAY=:1 phantomjs spec/lib/run-jasmine.js spec/spec-runner.html
9+
test-ci: build/jshint.xml
10+
@echo TRAVIS_JOB_ID $(TRAVIS_JOB_ID)
11+
@NODE_ENV=test ./node_modules/karma/bin/karma start karma.conf.ci.js --single-run && \
12+
cat ./coverage/IE\ 7*/lcov.info | ./node_modules/coveralls/bin/coveralls.js --verbose
1113

12-
jstd:
13-
/usr/bin/env DISPLAY=:1 java -jar spec/JsTestDriver-1.3.5.jar --config spec/jsTestDriver.conf --browser ${BROWSER_PATH} --port 4224 --tests 'all' --testOutput './target'
14-
15-
build: components
16-
@component build --dev
14+
clean:
15+
rm -fr build coverage dist *.log
1716

18-
components: component.json
19-
@component install --dev
17+
build:
18+
mkdir build
2019

21-
clean:
22-
rm -fr build components template.js
20+
dist:
21+
mkdir dist
22+
./node_modules/.bin/uglifyjs2 \
23+
node_modules/error-stack-parser/dist/error-stack-parser.min.js \
24+
node_modules/stack-generator/dist/stack-generator.min.js \
25+
node_modules/stacktrace-gps/dist/stacktrace-gps.min.js \
26+
stacktrace.js -o stacktrace.min.js --source-map stacktrace.js.map
27+
mv stacktrace.min.js stacktrace.js.map dist/
2328

24-
.PHONY: clean
29+
.PHONY: clean test dist

bower.json

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,10 @@
44
"main": "./stacktrace.js",
55
"homepage": "https://github.com/stacktracejs/stacktrace.js",
66
"authors": [
7-
"Eric Wendelin <me@eriwen.com>"
7+
"Eric Wendelin <me@eriwen.com> (http://www.eriwen.com)",
8+
"Victor Homyakov <vkhomyackov@gmail.com> (https://github.com/victor-homyakov)"
89
],
9-
"description": "Extract meaning from JS Errors",
10-
"dependencies": {
11-
"error-stack-parser": "~0.1.0",
12-
"stack-generator": "~0.1.0"
13-
},
14-
"devDependencies": {
15-
"jasmine": "~1.3.1",
16-
"jasmine-jstd-adapter": "~1.1.2"
17-
},
10+
"description": "Turns partial code location into precise code location",
1811
"moduleType": [
1912
"amd",
2013
"globals",
@@ -26,13 +19,13 @@
2619
"backtrace",
2720
"cross-browser",
2821
"framework-agnostic",
29-
"error"
22+
"error",
23+
"debugger"
3024
],
3125
"license": "Public Domain",
3226
"ignore": [
3327
"**/.*",
3428
"node_modules",
35-
"bower_components",
3629
"spec"
3730
]
3831
}

karma.conf.ci.js

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
module.exports = function (config) {
2+
'use strict';
3+
if (!process.env.SAUCE_USERNAME || !process.env.SAUCE_ACCESS_KEY) {
4+
console.log('Make sure the SAUCE_USERNAME and SAUCE_ACCESS_KEY environment variables are set.');
5+
process.exit(1);
6+
}
7+
8+
// Check out https://saucelabs.com/platforms for all browser/platform combos
9+
var customLaunchers = {
10+
slChrome: {
11+
base: 'SauceLabs',
12+
browserName: 'chrome'
13+
},
14+
slFirefox: {
15+
base: 'SauceLabs',
16+
browserName: 'firefox'
17+
},
18+
slIE11: {
19+
base: 'SauceLabs',
20+
browserName: 'internet explorer',
21+
platform: 'Windows 8.1',
22+
version: '11'
23+
},
24+
slIE9: {
25+
base: 'SauceLabs',
26+
browserName: 'internet explorer',
27+
platform: 'Windows 7',
28+
version: '9'
29+
}
30+
};
31+
32+
config.set({
33+
basePath: '',
34+
frameworks: ['jasmine', 'sinon'],
35+
files: [
36+
'node_modules/error-stack-parser/dist/error-stack-parser.min.js',
37+
'node_modules/stack-generator/dist/stack-generator.min.js',
38+
'node_modules/stacktrace-gps/dist/stacktrace-gps.min.js',
39+
'stacktrace.js',
40+
'spec/*-spec.js'
41+
],
42+
exclude: [],
43+
port: 9876,
44+
colors: true,
45+
logLevel: config.LOG_INFO,
46+
autoWatch: true,
47+
browserDisconnectTimeout : 10000,
48+
browserDisconnectTolerance : 1,
49+
browserNoActivityTimeout : 240000,
50+
captureTimeout : 240000,
51+
sauceLabs: {
52+
testName: 'stacktrace-gps unit tests',
53+
recordScreenshots: false,
54+
connectOptions: {
55+
port: 5757,
56+
logfile: 'sauce_connect.log'
57+
}
58+
},
59+
customLaunchers: customLaunchers,
60+
browsers: Object.keys(customLaunchers),
61+
reporters: ['progress', 'saucelabs', 'coverage'],
62+
preprocessors: {
63+
'stacktrace-gps.js': 'coverage'
64+
},
65+
coverageReporter: {
66+
type: 'lcov',
67+
dir: 'coverage'
68+
},
69+
singleRun: true
70+
});
71+
};

karma.conf.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
module.exports = function (config) {
2+
config.set({
3+
basePath: '',
4+
frameworks: ['jasmine', 'sinon'],
5+
files: [
6+
'node_modules/error-stack-parser/dist/error-stack-parser.min.js',
7+
'node_modules/stack-generator/dist/stack-generator.min.js',
8+
'node_modules/stacktrace-gps/dist/stacktrace-gps.min.js',
9+
'stacktrace.js',
10+
'spec/*-spec.js'
11+
],
12+
reporters: ['progress', 'coverage'],
13+
preprocessors: {
14+
'*.js': 'coverage'
15+
},
16+
coverageReporter: {
17+
type: 'lcov',
18+
dir: 'coverage'
19+
},
20+
port: 9876,
21+
colors: true,
22+
logLevel: config.LOG_INFO,
23+
autoWatch: true,
24+
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
25+
browsers: ['ChromeCanary', 'Firefox', 'Opera'],
26+
singleRun: false
27+
});
28+
};

package.json

Lines changed: 49 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,59 @@
11
{
22
"name": "stacktrace-js",
33
"description": "Framework-agnostic, micro-library for getting stack traces in all environments",
4-
"author": "Eric Wendelin <me@eriwen.com> (http://www.eriwen.com)",
5-
"version": "0.6.2",
6-
"keywords": ["stack-trace", "cross-browser", "framework-agnostic", "client", "browser"],
4+
"maintainers": [
5+
"Eric Wendelin <me@eriwen.com> (http://www.eriwen.com)",
6+
"Victor Homyakov <vkhomyackov@gmail.com> (https://github.com/victor-homyakov)"
7+
],
8+
"version": "1.0.0",
9+
"keywords": [
10+
"stacktrace",
11+
"error",
12+
"debugger",
13+
"client",
14+
"browser"
15+
],
716
"homepage": "http://www.stacktracejs.com",
817
"repository": {
918
"type": "git",
1019
"url": "git://github.com/stacktracejs/stacktrace.js.git"
1120
},
12-
"main": "./stacktrace.js",
13-
"engines": {
14-
"node": "*"
21+
"dependencies": {
22+
"error-stack-parser": "~0",
23+
"stack-generator": "~1",
24+
"stacktrace-gps": "~0"
25+
},
26+
"devDependencies": {
27+
"colors": "~1.0.3",
28+
"coveralls": "^2.11.2",
29+
"jasmine-node": "~1.14",
30+
"jasmine-sinon": "^0.4.0",
31+
"jshint": "^2.5.6",
32+
"karma": "~0.12",
33+
"karma-chrome-launcher": "^0.1.5",
34+
"karma-coverage": "^0.2.6",
35+
"karma-firefox-launcher": "^0.1.3",
36+
"karma-ie-launcher": "^0.1.5",
37+
"karma-jasmine": "^0.1.5",
38+
"karma-opera-launcher": "^0.1.0",
39+
"karma-phantomjs-launcher": "^0.1.4",
40+
"karma-safari-launcher": "^0.1.1",
41+
"karma-sauce-launcher": "^0.2.10",
42+
"karma-sinon": "^1.0.3",
43+
"sinon": "^1.10.3",
44+
"uglify-js2": "^2.1.11"
1545
},
16-
"dependencies": {}
46+
"bugs": {
47+
"url": "https://github.com/stacktracejs/stacktrace.js/issues"
48+
},
49+
"licenses": [
50+
{
51+
"type": "Public Domain",
52+
"url": "https://github.com/stacktracejs/stacktrace.js/blob/master/LICENSE"
53+
}
54+
],
55+
"main": "./stacktrace.js",
56+
"scripts": {
57+
"test": "make clean test"
58+
}
1759
}

spec/spec-helper.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// Polyfill for old browsers
2+
// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray
3+
if (!Array.isArray) {
4+
Array.isArray = function(arg) {
5+
return Object.prototype.toString.call(arg) === '[object Array]';
6+
};
7+
}
8+
9+
beforeEach(function() {
10+
this.addMatchers({
11+
toMatchStackFrame: function(expected) {
12+
var actual = this.actual;
13+
var message = '';
14+
if (actual.getFunctionName() !== expected[0]) {
15+
message += 'expected functionName: ' + actual.getFunctionName() + ' to equal ' + expected[0] + '\n';
16+
}
17+
if (Array.isArray(actual.getArgs()) && Array.isArray(expected[1])) {
18+
if (actual.getArgs().join() !== expected[1].join()) {
19+
message += 'expected args: ' + actual.getArgs() + ' to equal ' + expected[1] + '\n';
20+
}
21+
} else if (actual.getArgs() !== expected[1]) {
22+
message += 'expected args: ' + actual.getArgs() + ' to equal ' + expected[1] + '\n';
23+
}
24+
if (actual.getFileName() !== expected[2]) {
25+
message += 'expected fileName: ' + actual.getFileName() + ' to equal ' + expected[2] + '\n';
26+
}
27+
if (actual.getLineNumber() !== expected[3]) {
28+
message += 'expected lineNumber: ' + actual.getLineNumber() + ' to equal ' + expected[3] + '\n';
29+
}
30+
if (actual.getColumnNumber() !== expected[4]) {
31+
message += 'expected columnNumber: ' + actual.getColumnNumber() + ' to equal ' + expected[4] + '\n';
32+
}
33+
this.message = function() { return message };
34+
return message === '';
35+
}
36+
});
37+
});
38+
39+
40+

0 commit comments

Comments
 (0)