Pull to refresh

Храните ваши клятвы; Отношения с Node

Reading time 2 min
Views 1.3K
Original author: Dion Almaer
Клятвы могут быть прекрасны. Алексис Селлир, сыскавший славу за разработку «LESS» (и «less.js»), начинает становиться звездой Open Source, выпустив в свет Vows, — каркас для разработки на Node.JS, управляемой асинхронным поведением.

image

Если такую спецификацию BDD мы подадим на вход:
  1.  
  2. // division-by-zero-test.js
  3. var vows = require('vows'),
  4.     assert = require('assert');
  5.  
  6. // Create a Test Suite
  7. vows.describe('Division by Zero').addBatch({
  8.     'when dividing a number by zero': {
  9.         topic: function () { return 42 / 0 },
  10.  
  11.         'we get Infinity': function (topic) {
  12.             assert.equal (topic, Infinity);
  13.         }
  14.     },
  15.     'but when dividing zero by zero': {
  16.         topic: function () { return 0 / 0 },
  17.  
  18.         'we get a value which': {
  19.             'is not a number': function (topic) {
  20.                 assert.isNaN (topic);
  21.             },
  22.             'is not equal to itself': function (topic) {
  23.                 assert.notEqual (topic, topic);
  24.             }
  25.         }
  26.     }
  27. }).run(); // Run it
  28.  


То на выходе мы получим великолепно читаемый отчёт:
Выхлоп

С макросами в итоге мы получаем удобный DSL-синтаксис, например:
  1.  
  2. {   'GET /': {
  3.         topic: api.get('/'),
  4.         'shoud respond with a 200 OK': assertStatus(200)
  5.     },
  6.     'POST /': {
  7.         topic: api.post('/'),
  8.         'shoud respond with a 405 Method not allowed': assertStatus(405)
  9.     },
  10.     'GET /resources (no api-key)': {
  11.         topic: api.get('/resources'),
  12.         'shoud respond with a 403 Forbidden': assertStatus(403)
  13.     },
  14.     'GET /resources?apikey=af816e859c249fe'
  15.         topic: api.get('/resources?apikey=af816e859c249fe'),
  16.         'shoud return a 200 OK': assertStatus(200),
  17.         'should return a list of resources': function (res) {
  18.             assert.isArray (res.body);
  19.         }
  20.     }
  21. }
  22. // or even
  23. {
  24.   'GET  /':                   respondsWith(200),
  25.   'POST /':                   respondsWith(405),
  26.   'GET  /resources (no key)': respondsWith(403)
  27. }
  28.  


На сайте проекта подробно описаны процесс установки, примеры использования и т.д. Кстати, сделан сайт очень прилично, с использованием HTML5-разметки.

от переводчика: Название статьи на английском языке обыгрывает название проекта — Vows (клятвы).
Tags:
Hubs:
+4
Comments 23
Comments Comments 23

Articles