Клятвы могут быть прекрасны. Алексис Селлир, сыскавший славу за разработку «LESS» (и «less.js»), начинает становиться звездой Open Source, выпустив в свет Vows, — каркас для разработки на Node.JS, управляемой асинхронным поведением.

Если такую спецификацию BDD мы подадим на вход:
То на выходе мы получим великолепно читаемый отчёт:

С макросами в итоге мы получаем удобный DSL-синтаксис, например:
На сайте проекта подробно описаны процесс установки, примеры использования и т.д. Кстати, сделан сайт очень прилично, с использованием HTML5-разметки.
от переводчика: Название статьи на английском языке обыгрывает название проекта — Vows (клятвы).

Если такую спецификацию BDD мы подадим на вход:
-
- // division-by-zero-test.js
- var vows = require('vows'),
- assert = require('assert');
-
- // Create a Test Suite
- vows.describe('Division by Zero').addBatch({
- 'when dividing a number by zero': {
- topic: function () { return 42 / 0 },
-
- 'we get Infinity': function (topic) {
- assert.equal (topic, Infinity);
- }
- },
- 'but when dividing zero by zero': {
- topic: function () { return 0 / 0 },
-
- 'we get a value which': {
- 'is not a number': function (topic) {
- assert.isNaN (topic);
- },
- 'is not equal to itself': function (topic) {
- assert.notEqual (topic, topic);
- }
- }
- }
- }).run(); // Run it
-
То на выходе мы получим великолепно читаемый отчёт:

С макросами в итоге мы получаем удобный DSL-синтаксис, например:
-
- { 'GET /': {
- topic: api.get('/'),
- 'shoud respond with a 200 OK': assertStatus(200)
- },
- 'POST /': {
- topic: api.post('/'),
- 'shoud respond with a 405 Method not allowed': assertStatus(405)
- },
- 'GET /resources (no api-key)': {
- topic: api.get('/resources'),
- 'shoud respond with a 403 Forbidden': assertStatus(403)
- },
- 'GET /resources?apikey=af816e859c249fe'
- topic: api.get('/resources?apikey=af816e859c249fe'),
- 'shoud return a 200 OK': assertStatus(200),
- 'should return a list of resources': function (res) {
- assert.isArray (res.body);
- }
- }
- }
- // or even
- {
- 'GET /': respondsWith(200),
- 'POST /': respondsWith(405),
- 'GET /resources (no key)': respondsWith(403)
- }
-
На сайте проекта подробно описаны процесс установки, примеры использования и т.д. Кстати, сделан сайт очень прилично, с использованием HTML5-разметки.
от переводчика: Название статьи на английском языке обыгрывает название проекта — Vows (клятвы).