broken-promises-aplus

A compliant implementation of the Promises/A+ specification which doesn't actually work

Usage no npm install needed!

<script type="module">
  import brokenPromisesAplus from 'https://cdn.skypack.dev/broken-promises-aplus';
</script>

README

Promises/A+ logo

broken-promises-aplus

An implementation of the Promises/A+ specification which, although it passes the Compliance Test Suite, does not work.

Installation

npm install broken-promises-aplus

Testing

npm test

This runs the full Promises/A+ Compliance Test Suite.

Usage

import Promise from 'broken-promises-aplus'

const get = url => new Promise((resolve, reject) => {
  var xhr = new XMLHttpRequest()
  xhr.addEventListener("error", reject)
  xhr.addEventListener("load", resolve)
  xhr.open("GET", url)
  xhr.send()
})

get("https://github.com")
  .then(JSON.parse)
  .then(console.log)

The above code causes a puzzling exception to be thrown. No HTTP request is sent.

Why?

The purpose of this library is to demonstrate a point about Test-Driven Development:

If the people writing the tests and the people developing the software have opposing goals, then it must be impossible to programmatically distinguish a testing scenario from normal use.

A prominent recent example of this not happening when it should have happened is the Volkswagen emissions scandal. Here, the developers of the VW engine control unit programmed it to display unusual low-emissions behaviour when it (the ECU) detected that an emissions test was in progress, and to display much improved performance (at the cost of emissions) the rest of the time.

In the same way, broken-promises-aplus is programmed to behave like a conforming Promises/A+ implementation when it detects that the Compliance Test Suite is in progress, and to display other behaviour at all other times.

How can I help?

There are two major ways you can help to improve this library:

  • Improve the heuristics by which the library detects that a Compliance Test Suite is in progress
  • Make suggestions and pull requests for more interesting behaviour for when no Compliance Test Suite is in progress (nothing destructive, please)