2016-04-25 6 views
0

こんにちは、私はNodeJsでかなり新しいです。私は最初のテストを書こうとしています。簡単なユニットテストNodeJS/Express

私は設定に悩まされているので、私はいくつかの助けを望んでいました。

私はこの2つの関数を書いた:

app.js: 

var express = require('express') 
    , cors = require('cors') 
    , app = express(); 

app.get('/a_nice_jsonp',cors(corsOptions), function(req, res, next){ 
    var result = parseCookies(req); 
    res.jsonp(result); 
}); 

app.get('',function(req,res,next){ 
    res.statusCode = 200; 
    res.end() 
}); 

それが私の唯一のファイルであると私はモジュールとしてエクスポートされません。

私はそれについてのテストを書くのはかなり簡単だと思います。私はそれは本当に簡単な作業のように読み取りますが、私は、テストのセットアップとどのようにそれを行うにフェイルオーバーするように見えるとし

app-test.js: 

var expect = require('expect.js'); 
var express = require('express'); 
var expressApp = express(); 

describe('app js test', function() { 
    describe('GET /', function() { 
    it('should respond to GET with empty path', function() { 
     expressApp.get('', function(req, res, body){ 
     expect(res.status).to.equal(200); 
     }); 
    }) 
    }); 
}); 

:私はこのような何かを始めています。

誰でもお手伝いできますか?

編集:上記のテストはうまく動作します。しかし、私はテストすることが困難です。 .end()と同様に、jsonp requestresultである。私は単純な方法を知らないのですか?あなたは

expressApp.get('', function(req, res, body){ 
    expect(res.status).to.equal(200); 
    }); 

を行うと

+0

エラーメッセージはありますか?どのようにテストを実行しましたか? –

+0

申し訳ありませんが、私は十分正確ではありませんでした。上記のテストは正常に動作します。しかし、これは私がテストできる唯一のものです。例えば。どうすればres.jsonp(result)をテストできますか?私はそれにどのようにアプローチするのか分かりません。もう少し説明します。ヒントありがとう – Dribel

+0

いいえprobです。さて、あなたは応答ステータスを確認するために行ったのと同じ方法で行うことができます。また、応答は 'jsonp'であるためです。次に、ダミー関数を使って結果を解析して、結果が有効かどうかを調べることができます。 –

答えて

1

あなただけのルートをマッピングしています。

あなたのREST APIをテストするには、supertestのようなライブラリ

が、それはこのよう

var request = require('supertest'); 
var express = require('express'); 

var app = express(); 

app.get('/a_nice_jsonp',cors(corsOptions), function(req, res, next){ 
    var result = parseCookies(req); 
    res.jsonp(result); 
}); 

app.get('',function(req,res,next){ 
    res.statusCode = 200; 
    res.end() 
}); 

describe('app js test', function() { 
    describe('GET /', function() { 
    it('should respond to GET with empty path', function (done) { 
     request(app) 
       .get('') 
       .expect(200) 
       .end(done) 
    }); 
    }); 
}); 

編集の作品(そのリンクに急行+モカを使用してテストした例がある)を使用する必要があります

app.js

var express = require('express') 
    , cors = require('cors') 
    , app = express(); 

app.get('/a_nice_jsonp',cors(corsOptions), function(req, res, next){ 
    var result = parseCookies(req); 
    res.jsonp(result); 
}); 

app.get('',function(req,res,next){ 
    res.statusCode = 200; 
    res.end() 
}); 
module.exports = app; 
0123分離したファイルと

アプリ-test.js

var request = require('supertest'); 
var app = require('app.js'); 


describe('app js test', function() { 
    describe('GET /', function() { 
    it('should respond to GET with empty path', function (done) { 
     request(app) 
       .get('') 
       .expect(200) 
       .end(done) 
    }); 
    }); 
}); 
+0

ご返信ありがとうございます。私は最高のものを見て、それは何か、そしてすべてそれを見ます。あなたのヒントをありがとう。 – Dribel

+0

簡単な質問です。これは少し馬鹿に聞こえるかもしれませんが、実際のファイルがテストされることをどのように知ることができますか?私のテストでapp.jsファイルを挿入したり使用したりすることはありませんか? – Dribel

+0

私はそれを編集しました。これで両方のファイル(app.js/app-test.js)が得られました。ご覧のように、アプリはすべてのリクエスト(アプリ)内で使用されます。 – QoP