{"id":16738516,"url":"https://github.com/airhorns/qqunit","last_synced_at":"2025-07-07T20:08:50.963Z","repository":{"id":2347233,"uuid":"3309891","full_name":"airhorns/qqunit","owner":"airhorns","description":"JavaScript testing for sad people.","archived":false,"fork":false,"pushed_at":"2013-05-09T20:15:15.000Z","size":124,"stargazers_count":4,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-05T14:47:00.567Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"CoffeeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/airhorns.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-01-30T23:06:04.000Z","updated_at":"2014-03-12T16:56:05.000Z","dependencies_parsed_at":"2022-08-26T12:52:02.196Z","dependency_job_id":null,"html_url":"https://github.com/airhorns/qqunit","commit_stats":null,"previous_names":["hornairs/qqunit"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/airhorns%2Fqqunit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/airhorns%2Fqqunit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/airhorns%2Fqqunit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/airhorns%2Fqqunit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/airhorns","download_url":"https://codeload.github.com/airhorns/qqunit/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243796739,"owners_count":20349264,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-13T00:31:12.394Z","updated_at":"2025-03-15T22:16:57.701Z","avatar_url":"https://github.com/airhorns.png","language":"CoffeeScript","readme":"I was once [lost](https://github.com/kof/node-qunit), but now I'm found.\n\n# This is the QUnit test framework for nodejs v0.4 and v0.6.\n\n## Why QUnit and not nodeunit or mocha?\n\n - QUnit is awesome. Super stable, well maintained, fast, has handy stuff, and widely used already for browser testing.\n - QUnit is simple, yet still extensible. It makes for easier to read, more uniform tests when you have fewer ways of expressing what you are testing.\n - Did you see that? qqunit is meant explicitly for testing something in the browser and in node using the same suite. Mocha supports this as well but I find QUnit to be faster and better written.\n\n## Why not node-qunit?\n\n - Incompatible APIs between 0.4 and 0.6, but if that doesn't matter:\n - An unnecessary multiprocess model which makes anything other than `console.log` debugging really hard\n - Absurd console output for test runs, without any indication of progress.\n - Inability to test data structures with circular references\n\n## How do I use it?\n\nA simple example:\n\n```coffeescript\nqqunit = require 'qqunit'\ntests = glob.sync(\"#{__dirname}/test/**/*_test.coffee\")\nqqunit.Runner.run tests\n```\n\nor\n\n```bash\n you@host $: npm install qqunit\n you@host $: qqunit test_a.coffee test_b.coffee\n```\n\nMore complex:\n\n```coffeescript\nglob = require 'glob'\npath = require 'path'\nqqunit = require 'qqunit'\n\n# Load jquery into window\njqueryPath = path.join(__dirname, 'lib', 'jquery.js')\n\nqqunit.Environment.jsdom.jQueryify window, jQueryPath, (window, jQuery) -\u003e\n  global.jQuery = jQuery\n\n  # Load test helper\n  Helper = require './batman/test_helper'\n  global[k] = v for own k,v of Helper\n\n  global.MyCoolCode = require '../src/my_cool_code'\n\n  tests = glob.sync(\"#{__dirname}/**/*_test.coffee\")\n\n  console.log \"Running test suite. #{tests.length} files required.\"\n  qqunit.Runner.run tests, (stats) -\u003e\n    process.exit stats.failed\n```\n\nHorray!\n\n## Background\n\nqqunit came from me being really, really sad. node-qunit put me in a dark place, but out I have come with less than 100 lines of CoffeeScript which accomplish the same thing. qqunit is stupid simple: run QUnit inside jsdom and add some log statements to show you how it goes in the console.\n\n# License\n\nqqunit is copyright 2012 by Shopify, released under the MIT License (see LICENSE for details).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fairhorns%2Fqqunit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fairhorns%2Fqqunit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fairhorns%2Fqqunit/lists"}