diff --git a/package-lock.json b/package-lock.json index 697547bd1db..ade664c2a57 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,8 +30,10 @@ "global-jsdom": "^24.0.0", "jsdom": "^24.0.0", "karma": "^6.4.3", + "karma-chai": "^0.1.0", "karma-chrome-launcher": "^3.2.0", - "karma-mocha": "2.0.1", + "karma-mocha": "^2.0.1", + "karma-sinon": "^1.0.5", "karma-spec-reporter": "^0.0.36", "mocha": "^10.3.0", "publint": "^0.2.7", @@ -5837,6 +5839,16 @@ "node": ">= 10" } }, + "node_modules/karma-chai": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/karma-chai/-/karma-chai-0.1.0.tgz", + "integrity": "sha512-mqKCkHwzPMhgTYca10S90aCEX9+HjVjjrBFAsw36Zj7BlQNbokXXCAe6Ji04VUMsxcY5RLP7YphpfO06XOubdg==", + "dev": true, + "peerDependencies": { + "chai": "*", + "karma": ">=0.10.9" + } + }, "node_modules/karma-chrome-launcher": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz", @@ -5867,6 +5879,19 @@ "minimist": "^1.2.3" } }, + "node_modules/karma-sinon": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/karma-sinon/-/karma-sinon-1.0.5.tgz", + "integrity": "sha512-wrkyAxJmJbn75Dqy17L/8aILJWFm7znd1CE8gkyxTBFnjMSOe2XTJ3P30T8SkxWZHmoHX0SCaUJTDBEoXs25Og==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + }, + "peerDependencies": { + "karma": ">=0.10", + "sinon": "*" + } + }, "node_modules/karma-spec-reporter": { "version": "0.0.36", "resolved": "https://registry.npmjs.org/karma-spec-reporter/-/karma-spec-reporter-0.0.36.tgz", @@ -13450,6 +13475,13 @@ } } }, + "karma-chai": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/karma-chai/-/karma-chai-0.1.0.tgz", + "integrity": "sha512-mqKCkHwzPMhgTYca10S90aCEX9+HjVjjrBFAsw36Zj7BlQNbokXXCAe6Ji04VUMsxcY5RLP7YphpfO06XOubdg==", + "dev": true, + "requires": {} + }, "karma-chrome-launcher": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz", @@ -13479,6 +13511,13 @@ "minimist": "^1.2.3" } }, + "karma-sinon": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/karma-sinon/-/karma-sinon-1.0.5.tgz", + "integrity": "sha512-wrkyAxJmJbn75Dqy17L/8aILJWFm7znd1CE8gkyxTBFnjMSOe2XTJ3P30T8SkxWZHmoHX0SCaUJTDBEoXs25Og==", + "dev": true, + "requires": {} + }, "karma-spec-reporter": { "version": "0.0.36", "resolved": "https://registry.npmjs.org/karma-spec-reporter/-/karma-spec-reporter-0.0.36.tgz", diff --git a/package.json b/package.json index 3c7abe858c9..34f245342f1 100644 --- a/package.json +++ b/package.json @@ -125,8 +125,10 @@ "global-jsdom": "^24.0.0", "jsdom": "^24.0.0", "karma": "^6.4.3", + "karma-chai": "^0.1.0", "karma-chrome-launcher": "^3.2.0", - "karma-mocha": "2.0.1", + "karma-mocha": "^2.0.1", + "karma-sinon": "^1.0.5", "karma-spec-reporter": "^0.0.36", "mocha": "^10.3.0", "publint": "^0.2.7", @@ -172,7 +174,7 @@ "serve": "serve build -l 51000", "test": "mocha --recursive --require test/fixtures.mjs", "test:coverage": "c8 npm test", - "test:karma": "karma start tests/karma.conf.cjs -- --single-run --release", + "test:karma": "karma start tests/karma.conf.cjs -- --single-run", "test:types": "tsc --pretty false build/playcanvas.d.ts" } } diff --git a/tests/framework/handlers/test_sprite_resource.js b/tests/framework/handlers/test_sprite_resource.js index b2e72ff8bd5..60da295c678 100644 --- a/tests/framework/handlers/test_sprite_resource.js +++ b/tests/framework/handlers/test_sprite_resource.js @@ -27,14 +27,14 @@ describe("pc.SpriteHandler", function () { this.app.assets.load(spriteAsset); spriteAsset.ready(function (asset) { - ok(asset.resource.atlas); + expect(asset.resource.atlas).to.exist; - strictEqual(asset.loaded, true); + expect(asset.loaded).to.be.true; - strictEqual(asset.data.renderMode, 0); - strictEqual(asset.data.pixelsPerUnit, 100); - strictEqual(asset.data.textureAtlasAsset, atlasAsset.id); - strictEqual(asset.data.frameKeys[0], 0); + expect(asset.data.renderMode).to.equal(0); + expect(asset.data.pixelsPerUnit).to.equal(100); + expect(asset.data.textureAtlasAsset).to.equal(atlasAsset.id); + expect(asset.data.frameKeys[0]).to.equal(0); done(); }, this); @@ -70,17 +70,15 @@ describe("pc.SpriteHandler", function () { this.app.assets.load(spriteAsset); spriteAsset.ready(function (asset) { + expect(asset.resource.atlas).to.exist; - strictEqual(asset.loaded, true); + expect(asset.loaded).to.be.true; - ok(asset.resource.atlas); - - strictEqual(asset.data.renderMode, 0); - strictEqual(asset.data.pixelsPerUnit, 100); - strictEqual(asset.data.textureAtlasAsset, atlasAsset.id); - strictEqual(asset.data.frameKeys[0], 0); + expect(asset.data.renderMode).to.equal(0); + expect(asset.data.pixelsPerUnit).to.equal(100); + expect(asset.data.textureAtlasAsset).to.equal(atlasAsset.id); + expect(asset.data.frameKeys[0]).to.equal(0); done(); - }, this); spriteAsset.on('error', function (err) { diff --git a/tests/karma.conf.cjs b/tests/karma.conf.cjs index 04a9c8d215a..75f7284349e 100644 --- a/tests/karma.conf.cjs +++ b/tests/karma.conf.cjs @@ -1,19 +1,3 @@ -var fs = require('fs'); -var path = require('path'); - -var release = process.argv.includes('--release'); -var sourceFiles; - -if (release) { - console.log('Testing release build'); - sourceFiles = [path.resolve('build/playcanvas.js')]; -} else { - console.log('Testing unbuilt sources'); - sourceFiles = fs.readFileSync('build/dependencies.txt').toString().split('\n').map(function (value) { - return path.resolve(value.replace('../', '')); - }); -} - module.exports = function (config) { config.set({ // base path that will be used to resolve all patterns (eg. files, exclude) @@ -24,13 +8,8 @@ module.exports = function (config) { }, // list of files / patterns to load in the browser - files: sourceFiles.concat([ - // libraries - 'node_modules/sinon/pkg/sinon.js', - 'node_modules/chai/chai.js', - - // test environment setup - 'tests/setup.js', + files: [ + 'build/playcanvas.js', // test files - change this to a specific file in order to run a single suite 'tests/**/test_*.js', @@ -38,11 +17,9 @@ module.exports = function (config) { // resources - list any files here that need to be loaded by tests (i.e. via XHR), or // need to be pre-loaded in order to provide helper functions etc. { pattern: 'tests/test-assets/**/*.*', included: false, served: true, watched: true, nocache: true }, - { pattern: 'tests/helpers/**/*.js', included: true, served: true, watched: true, nocache: true }, { pattern: 'tests/framework/components/script/*.*', included: false, served: true, watched: true, nocache: true }, - { pattern: 'tests/platform/input/simulate_event.js', included: true, served: true, watched: true, nocache: true }, { pattern: 'examples/assets/**/*.*', included: false, served: true, watched: true, nocache: true } - ]), + ], // Serve .gz files with Content-Encoding: gzip customHeaders: [{ @@ -60,7 +37,15 @@ module.exports = function (config) { // frameworks to use // available frameworks: https://npmjs.org/browse/keyword/karma-adapter - frameworks: ['mocha'], + frameworks: ['mocha', 'chai', 'sinon'], + + plugins: [ + 'karma-mocha', + 'karma-chai', + 'karma-sinon', + 'karma-chrome-launcher', + 'karma-spec-reporter' + ], // test results reporter to use // possible values: 'dots', 'progress' @@ -77,8 +62,6 @@ module.exports = function (config) { // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG logLevel: config.LOG_INFO, - // browserConsoleLogOptions: config.LOG_WARN, - // enable / disable watching file and executing tests whenever any file changes autoWatch: true, diff --git a/tests/setup.js b/tests/setup.js deleted file mode 100644 index 0f6da1fa367..00000000000 --- a/tests/setup.js +++ /dev/null @@ -1,33 +0,0 @@ -// move chai methods on window -(function(window) { - window.should = window.chai.should(); - window.expect = window.chai.expect; - window.assert = window.chai.assert; -})(window); - -// Added these helpers to speed up porting to mocha -// TODO: remove and replace with expect() calls in tests - -window.strictEqual = function (a, b) { - expect(a).to.equal(b); -}; - -window.equal = function (a, b) { - expect(a).to.equal(b); -} - -window.notEqual = function (a, b) { - expect(a).to.not.equal(b); -} - -window.deepEqual = function (a, b) { - expect(a).to.deep.equal(b); -} - -window.ok = function (a) { - expect(a).to.exist; -} - -window.close = function (a, b, e) { - expect(a).to.be.closeTo(b, e); -}