Тестирование веб-API с использованием jasmine и node.js - PullRequest
5 голосов
/ 17 октября 2011

Мы написали веб-API RESTful, который отвечает на запросы GET и PUT, используя node.js.У нас возникли некоторые трудности при тестировании API.Во-первых, мы использовали Zombie.js , но это плохо документировано, поэтому мы не смогли заставить его делать запросы PUT:

var zombie = require("zombie");

describe("description", function() {
  it("description", function() {
    zombie.visit("http://localhost:3000/", function (err, browser, status) {
      expect(browser.text).toEqual("A")
    });
  });
});

После этого мы попытались использовать REST-клиент с именем restler , что было бы хорошо, так как нам не нужно никакого расширенного моделирования браузера.Это не удается из-за того, что запрос кажется асинхронным - т. Е. Тест бесполезен, поскольку он заканчивается до вызова обратного вызова «on success»:

var rest = require('restler');
describe("description", function() {
  it("description", function() {
    rest.get("http://www.google.com").on('complete', function(data, response) {
      // Should fail
      expect(data).toMatch(/apa/i);
    });
  });
});

Мы будем благодарны за любые советы об альтернативныхтестирование фреймворков или синхронных запросов клиентов.

Ответы [ 2 ]

4 голосов
/ 13 августа 2013

Для узла jasmine-node от Misko Hevery есть асинхронная поддержка и оболочка jasmine.

https://github.com/mhevery/jasmine-node

Вы добавляете параметр done к подписи теста и вызываете ее, когда завершается асинхронный вызов. Вы также можете настроить время ожидания (по умолчанию 500 мс).

например. с Github README

it("should respond with hello world", function(done) {
  request("http://localhost:3000/hello", function(error, response, body){
    done();
  }, 250);  // timeout after 250 ms
});

Jasmine Regular также поддерживает асинхронное тестирование с запусками и waitsFor, или может использовать 'done' с Jasmine.Async.

3 голосов
/ 19 октября 2011

Мне было любопытно, поэтому я провел немного больше исследований. Кроме зомби , у вас есть несколько вариантов ...

Вы можете использовать обетов с библиотекой http , как этот парень .

Однако я думаю, что лучшим подходом может быть использование APIeasy, которое, очевидно, основано на обетах . В nodejitsu есть замечательная статья , в которой объясняется, как ее использовать .

Другая интересная идея - использовать expresso , если вы используете express.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...