tests are browser compatible, karma tests with sauceLabs, readme on using in browser, #21
parent
6c93d0346d
commit
6b9bc9e464
|
@ -27,3 +27,9 @@ build/Release
|
|||
node_modules
|
||||
|
||||
.DS_Store
|
||||
|
||||
# Browserified browser tests
|
||||
.browser
|
||||
|
||||
# Ajv bundle
|
||||
ajv.bundle.js
|
||||
|
|
19
README.md
19
README.md
|
@ -69,6 +69,25 @@ if (!valid) console.log(ajv.errorsText());
|
|||
ajv compiles schemas to functions and caches them in all cases (using stringified schema as a key - using [json-stable-stringify](https://github.com/substack/json-stable-stringify)), so that the next time the same schema is used (not necessarily the same object instance) it won't be compiled again.
|
||||
|
||||
|
||||
## Using in browser
|
||||
|
||||
You can require ajv directly from the code you browserify - in this case ajv will be a part of your bundle.
|
||||
|
||||
If you need to use ajv in several bundles you probably don't won't to have it included separately in each one. In this case you can create browserify bundle using `bin/create-bundle` script (thanks to [siddo420](https://github.com/siddo420)).
|
||||
|
||||
|
||||
Then you need to load ajv in the browser:
|
||||
```
|
||||
<script src="ajv.bundle.js"></script>
|
||||
```
|
||||
|
||||
Then you can use it as shown above - `require` will be global and you can `require('ajv')`.
|
||||
|
||||
Ajv passes tests with these browsers:
|
||||
|
||||
[![Sauce Test Status](https://saucelabs.com/browser-matrix/epoberezkin.svg)](https://saucelabs.com/u/epoberezkin)
|
||||
|
||||
|
||||
## Formats
|
||||
|
||||
The following formats are supported for string validation with "format" keyword:
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
browserify -r ./lib/ajv.js:ajv -o ajv.bundle.js
|
|
@ -0,0 +1,5 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
find spec -type f -name '*.spec.js' | \
|
||||
xargs -I {} sh -c \
|
||||
'export f="{}"; browserify $f -t require-globify -r js-beautify -o ${f/spec/.browser};'
|
|
@ -0,0 +1,59 @@
|
|||
// Karma configuration
|
||||
// Generated on Thu Mar 13 2014 14:12:04 GMT-0700 (PDT)
|
||||
|
||||
module.exports = function(config) {
|
||||
config.set({
|
||||
|
||||
// base path that will be used to resolve all patterns (eg. files, exclude)
|
||||
basePath: '',
|
||||
|
||||
|
||||
// frameworks to use
|
||||
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
|
||||
frameworks: ['mocha'],
|
||||
|
||||
|
||||
// list of files / patterns to load in the browser
|
||||
files: [
|
||||
'.browser/*.js'
|
||||
],
|
||||
|
||||
// test results reporter to use
|
||||
// possible values: 'dots', 'progress'
|
||||
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
|
||||
reporters: ['progress'],
|
||||
|
||||
|
||||
// web server port
|
||||
port: 9876,
|
||||
|
||||
|
||||
// enable / disable colors in the output (reporters and logs)
|
||||
colors: true,
|
||||
|
||||
|
||||
// level of logging
|
||||
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
|
||||
logLevel: config.LOG_INFO,
|
||||
|
||||
|
||||
// enable / disable watching file and executing tests whenever any file changes
|
||||
autoWatch: false,
|
||||
|
||||
|
||||
// Start these browsers, currently available:
|
||||
// - Chrome
|
||||
// - ChromeCanary
|
||||
// - Firefox
|
||||
// - Opera
|
||||
// - Safari (only Mac)
|
||||
// - PhantomJS
|
||||
// - IE (only Windows)
|
||||
browsers: ['Chrome'],
|
||||
|
||||
|
||||
// Continuous Integration mode
|
||||
// if true, Karma captures browsers, runs the tests and exits
|
||||
singleRun: true
|
||||
});
|
||||
};
|
|
@ -0,0 +1,137 @@
|
|||
'use strict';
|
||||
|
||||
var fs = require('fs');
|
||||
|
||||
module.exports = function(config) {
|
||||
|
||||
// Use ENV vars on Travis and sauce.json locally to get credentials
|
||||
if (!process.env.SAUCE_USERNAME) {
|
||||
if (!fs.existsSync('sauce.json')) {
|
||||
console.log('Create a sauce.json with your credentials based on the sauce-sample.json file.');
|
||||
process.exit(1);
|
||||
} else {
|
||||
process.env.SAUCE_USERNAME = require('./sauce').username;
|
||||
process.env.SAUCE_ACCESS_KEY = require('./sauce').accessKey;
|
||||
}
|
||||
}
|
||||
|
||||
// Browsers to run on Sauce Labs
|
||||
var customLaunchers = {
|
||||
'SL_Chrome_27': {
|
||||
base: 'SauceLabs',
|
||||
browserName: 'chrome',
|
||||
version: '27'
|
||||
},
|
||||
'SL_Chrome_43': {
|
||||
base: 'SauceLabs',
|
||||
browserName: 'chrome',
|
||||
version: '43'
|
||||
},
|
||||
'SL_Chrome_beta': {
|
||||
base: 'SauceLabs',
|
||||
browserName: 'chrome',
|
||||
version: 'beta'
|
||||
},
|
||||
'SL_InternetExplorer_9': {
|
||||
base: 'SauceLabs',
|
||||
browserName: 'internet explorer',
|
||||
version: '9'
|
||||
},
|
||||
'SL_InternetExplorer_10': {
|
||||
base: 'SauceLabs',
|
||||
browserName: 'internet explorer',
|
||||
version: '10'
|
||||
},
|
||||
'SL_InternetExplorer_11': {
|
||||
base: 'SauceLabs',
|
||||
browserName: 'internet explorer',
|
||||
version: '11'
|
||||
},
|
||||
'SL_FireFox_4': {
|
||||
base: 'SauceLabs',
|
||||
browserName: 'firefox',
|
||||
version: '4'
|
||||
},
|
||||
'SL_FireFox_17': {
|
||||
base: 'SauceLabs',
|
||||
browserName: 'firefox',
|
||||
version: '17'
|
||||
},
|
||||
'SL_FireFox_24': {
|
||||
base: 'SauceLabs',
|
||||
browserName: 'firefox',
|
||||
version: '24'
|
||||
},
|
||||
'SL_FireFox': {
|
||||
base: 'SauceLabs',
|
||||
browserName: 'firefox'
|
||||
},
|
||||
'SL_Safari_5': {
|
||||
base: 'SauceLabs',
|
||||
browserName: 'safari',
|
||||
version: '5'
|
||||
},
|
||||
'SL_Safari_6': {
|
||||
base: 'SauceLabs',
|
||||
browserName: 'safari',
|
||||
version: '6'
|
||||
},
|
||||
'SL_Safari_7': {
|
||||
base: 'SauceLabs',
|
||||
browserName: 'safari',
|
||||
version: '7'
|
||||
},
|
||||
'SL_iPhone_8': {
|
||||
base: 'SauceLabs',
|
||||
browserName: 'iphone',
|
||||
version: '8.1'
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
config.set({
|
||||
|
||||
// base path that will be used to resolve all patterns (eg. files, exclude)
|
||||
basePath: '',
|
||||
|
||||
|
||||
// frameworks to use
|
||||
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
|
||||
frameworks: ['mocha'],
|
||||
|
||||
|
||||
// list of files / patterns to load in the browser
|
||||
files: [
|
||||
'.browser/*.js'
|
||||
],
|
||||
|
||||
|
||||
// test results reporter to use
|
||||
// possible values: 'dots', 'progress'
|
||||
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
|
||||
reporters: ['dots', 'saucelabs'],
|
||||
|
||||
|
||||
// web server port
|
||||
port: 9876,
|
||||
|
||||
colors: true,
|
||||
|
||||
// level of logging
|
||||
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
|
||||
logLevel: config.LOG_INFO,
|
||||
|
||||
sauceLabs: {
|
||||
testName: 'Ajv'
|
||||
},
|
||||
captureTimeout: 300000,
|
||||
browserNoActivityTimeout: 120000,
|
||||
|
||||
customLaunchers: customLaunchers,
|
||||
|
||||
// start these browsers
|
||||
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
|
||||
browsers: Object.keys(customLaunchers),
|
||||
singleRun: true
|
||||
});
|
||||
};
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "ajv",
|
||||
"version": "0.6.7",
|
||||
"version": "0.6.8",
|
||||
"description": "Another JSON Schema Validator",
|
||||
"main": "lib/ajv.js",
|
||||
"scripts": {
|
||||
|
@ -29,7 +29,11 @@
|
|||
"dot": "^1.0.3",
|
||||
"glob": "^5.0.10",
|
||||
"js-beautify": "^1.5.6",
|
||||
"json-schema-test": "0.0.3",
|
||||
"json-schema-test": "0.1.1",
|
||||
"karma": "^0.13.3",
|
||||
"karma-chrome-launcher": "^0.2.0",
|
||||
"karma-mocha": "^0.2.0",
|
||||
"karma-sauce-launcher": "^0.2.14",
|
||||
"mocha": "^2.2.5",
|
||||
"watch": "^0.16.0"
|
||||
}
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"username": "epoberezkin",
|
||||
"accessKey": "6ab61c89-e0d3-46bc-8719-aa44d58cea84"
|
||||
}
|
|
@ -147,7 +147,7 @@ describe('Validation errors', function () {
|
|||
|
||||
function shouldBeInvalid(validate, data, numErrors) {
|
||||
validate(data) .should.equal(false);
|
||||
validate.errors.length .should.equal(numErrors || 1);
|
||||
should.equal(validate.errors.length, numErrors || 1)
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
'use strict';
|
||||
|
||||
var jsonSchemaTest = require('json-schema-test');
|
||||
var jsonSchemaTest = require('json-schema-test')
|
||||
, path = require('path');
|
||||
|
||||
|
||||
var Ajv = require('../lib/ajv')
|
||||
|
@ -26,10 +27,7 @@ addRemoteRefs();
|
|||
|
||||
|
||||
jsonSchemaTest([ ajv, fullAjv ], {
|
||||
suites: {
|
||||
'JSON-Schema tests draft4': './JSON-Schema-Test-Suite/tests/draft4/{**/,}*.json',
|
||||
'Advanced schema tests': './tests/{**/,}*.json'
|
||||
},
|
||||
suites: testSuites(),
|
||||
only: [
|
||||
// 'type', 'not', 'allOf', 'anyOf', 'oneOf', 'enum',
|
||||
// 'maximum', 'minimum', 'multipleOf', 'maxLength', 'minLength', 'pattern',
|
||||
|
@ -49,6 +47,29 @@ jsonSchemaTest([ ajv, fullAjv ], {
|
|||
});
|
||||
|
||||
|
||||
function testSuites() {
|
||||
if (typeof window == 'object') {
|
||||
var suites = {
|
||||
'JSON-Schema tests draft4': require('./JSON-Schema-Test-Suite/tests/draft4/{**/,}*.json', {mode: 'hash'}),
|
||||
'Advanced schema tests': require('./tests/{**/,}*.json', {mode: 'hash'})
|
||||
};
|
||||
for (var suiteName in suites) {
|
||||
var suite = suites[suiteName];
|
||||
var suiteArr = [];
|
||||
for (var testSetName in suite)
|
||||
suiteArr.push({ name: testSetName, test: suite[testSetName] });
|
||||
suites[suiteName] = suiteArr;
|
||||
}
|
||||
} else {
|
||||
var suites = {
|
||||
'JSON-Schema tests draft4': './JSON-Schema-Test-Suite/tests/draft4/{**/,}*.json',
|
||||
'Advanced schema tests': './tests/{**/,}*.json'
|
||||
}
|
||||
}
|
||||
return suites;
|
||||
}
|
||||
|
||||
|
||||
function addRemoteRefs() {
|
||||
for (var id in remoteRefs) {
|
||||
ajv.addSchema(remoteRefs[id], id);
|
||||
|
|
Loading…
Reference in New Issue