5

node.js を使用して GET および PUT リクエストに応答する RESTful Web API を作成しました。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")
    });
  });
});

その後、restlerと呼ばれる REST クライアントを使用してみましたが、高度なブラウザー シミュレーションは必要ないため、これで問題ありません。これは、リクエストが非同期のように見えるため失敗します。つまり、「成功時」コールバックが呼び出される前にテストが終了するため、テストは役に立ちません。

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);
    });
  });
});

代替のテスト フレームワークや同期リクエスト クライアントに関するヒントをいただければ幸いです。

4

2 に答える 2

4

ノードの場合、Misko Hevery の jasmine-node は非同期サポートを備えており、jasmine をラップします。

https://github.com/mheevery/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 レギュラーは、runs と waitsFor を使用した非同期テストもサポートしており、Jasmine.Async で「done」を使用できます。

于 2013-08-13T12:27:48.433 に答える