broken-promises-aplus
v1.0.0
Published
A compliant implementation of the Promises/A+ specification which doesn't actually work
Downloads
20
Maintainers
Readme
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)