31

優しくしてください。私は非同期コーディングに不慣れで、ノードを使用してAPIサーバーを開発する集中的なプロジェクトに真っ向から投げ込まれました。私はそれを愛していますが、いくつかのものは自然に来ていません。

私たちのプロジェクトは、expressjsを使用して構築されています。エクスプレスサーバーをインスタンス化するファイルserver.jsがあり、ルーターなどをインスタンス化します。これを(部分的に)完全なサーバーで統合テストする必要があります。通常、私が行うことは、コマンドラインから「%node server.js」を実行し、Pythonリクエストまたはcurlmakeリクエストのいずれかを使用して応答を確認することです。

これで、ユニットと統合テストスイートを作成して、今後のテストを自動化できるようになりました。私はモカを使用してきましたが、統合テストにスーパーテストを使用しようとしています。問題は、supertestがサーバーオブジェクトを予期し、それがテストを適用することですが、サーバーオブジェクトを構築するファイルは何も返しません。そのファイルを変更したくないので、テストに使用するサーバーオブジェクトにアクセスする方法について困惑しています。

私のサーバーファイルは(部分的に)次のようになります:

var express = require('express')

var app = express();

// Express Configuration
app.use(express.favicon()); //handles favicon request, which keeps it out of the log when using a browser :)
app.use(express.bodyParser()); //slurps up the body in chunks the node.js way :)
// ...and so on

私のモカテストファイルは次のようになります

var request = require('supertest')
  , app     = require('../server.js')
  , assert  = require("assert");

describe('POST /', function(){
  it('should fail bad img_uri', function(done){
    request(app)
        .post('/')
        .send({
            'img_uri' : 'foobar'
        })  
        .expect(500)
        .end(function(err, res){
        console.dir(err)
        console.dir(res)
            done();
        })  
  })    
})

このテストを実行すると、addressという名前のメソッドがないアプリオブジェクトに関する苦情が表示されます。私の質問は、アプリオブジェクトがスコープ内にあるようにserver.jsファイルを要求/呼び出す方法はありますか?それとも私はこれについて間違っているのでしょうか。また、http.jsを使用してサーバーに直接電話をかけることも少し試しましたが、その方法もうまくいきませんでした。ありがとう!

4

1 に答える 1

77

app次のオブジェクトをエクスポートする必要がありserver.jsます。

var app = express();

module.exports = app;

...
于 2012-08-13T02:56:19.433 に答える