2016-07-28 7 views
-1

目標:私は私の認証RESTfulなAPIをテストしようとしています動的テスト認証RESTfulなAPI(NodeJS、モカ、たSuperAgent)

。私が使用しているツールは、Mocha、Supertest(.agent)、chai(.assert)のモジュールを持つNodeJSです。

私が試した何

var users = [ new User("admin", "secretPass"), new User("guest", "Pass")]; 
describe('request some protected data', function(){ 
    users.forEach(function(user){ 
     before(function(){ 
      agent.post('/login').send({ user.username, user.key }) 
       .end(function(err, res) { 

       } 
     } 

     it('get data', function(done){ 
      agent.get('/data').send({ user.username, user.key }) 
       .end(function(err, res) { 
        // assertions on data 
       } 
     } 
    } 
} 

問題:

機能は、すべてのテストを一度に、その後に実行される前に、複数で結果上記のスニペットに似たものを使用して(それ)。 エージェントは常にユーザの最後のユーザとしてログインします。

beforeEachで前に置き換えて、users.forEachの上に配置しようとしましたが、ユーザーが範囲外になりました。

私の問題に適した解決方法を説明する小さなコードスニペットを誰かに提供できますか?

答えて

0

パラメータを受け入れ、ログインが完了したときに呼び出すことによって、before機能が非同期であることをモカに伝える必要があります。もちろん

before(function(done){ 
     agent.post('/login').send({ user.username, user.key }) 
      .end(function(err, res) { 
       // I assume you're logged in here... 
       done(); 
      } 
    } 

は、あなたはまた、任意のユーザーの前に実行されますそれ以外の場合は、おそらく、あまりにも、各ユーザーの新しいdescribeブロックを作成したいと思うなどの取り扱いに必要なエラーを追加するには、ログイン・コールのすべてをお勧めしますテストは、例えば起こる

users.forEach(function(user){ 
    describe("user X tests", function() { // <-- NEW 
    before(function(){ 
     agent.post('/login').send({ user.username, user.key }) 
      .end(function(err, res) { 

      } 
    } 

    it('get data', function(done){ 
     agent.get('/data').send({ user.username, user.key }) 
      .end(function(err, res) { 
       // assertions on data 
      } 
    } 
    }); // <- NEW 
}