2016-11-24 2 views
0

私の機能テストでは、requestHandler.value5に変更したいと考えています。機能テストの前にサーバ上の定義済みの値を変更する

スイートを実行しているときに、1000のドキュメントをdbに作成することは実際にはオプションではないため、スイートを実行する前に値をプログラムで変更してからリセットすることは可能ですか?私は作業する前に、5のドキュメントをdbで作成することができます。

粗い私は必要なものを返すために単体テストでcountDocumentsInDb()をスタブすることができますが、私は質問のために以下のロジックを単純化しました。

app.js

var express = require('express'); 
var app = express(); 
var server = require('http').createServer(app); 
var requestHandler = require('./lib/requestHandler.js'); 
var PORT = 4000; 

app.route('/validate') 
    .get(function(req, res) { 
    requestHandler.process(req, res); 
    }); 

if (!module.parent) { 
    server.listen(PORT, function(err) { 
    if (err) { 
     return; 
    } 
    }); 
} 

module.exports = app; 

requestHandler.js

var requestHandler = { 

    value: 1000, 

    process: function(req, res) { 

    numberOfDocumentsInDb = countDocumentsInDb(); 

    if (numberOfDocumentsInDb === this.value) { 
     res.send(true); 
    } else { 
     res.send(false); 
    } 
    } 
}; 

module.exports = requestHandler; 

FVTスタイルのテスト..

var Promise = require('promise'); 
var request = require('supertest'); 
var chai = require('chai'); 
chai.should(); 
var server = require('../../app.js'); 

describe('app.js', function() { 
    describe('/validate', function() { 

    it('should return true if number of documents in db matches pre-defined value', function(done) { 
     var fvtPromise = new Promise(function(fulfill) { 
     request(server) 
      .get('/validate') 
      .expect(200) 
      .end(function(err, res) { 
      if (err) { 
       throw err; 
      } 
      res.body.should.equal(true); 
      fulfill(null); 
      }); 
     }); 
     fvtPromise.done(function() { 
     done(); 
     }); 
    }); 
    }); 
}); 
+0

ハードコーディング値を1000に設定すると、サーバーの使用例を説明できますか?その質問に対する答えは、私が与える答えを変えるだろう。 – user3137190

答えて

1

あなたはrequire.cacheと遊ぶことができる、にあなたをできるようになりますそのrequestHandlerの値
私はあなたがそのアイデアを得ることを祈っています。
- それぞれの前に修正するにはキャッシュを必要とし、あなたのテストが
値設定-Inそれぞれが元の値に戻って設定した後、それがキャッシュバレスがかかりますのでconst server = require('./app.js');は、テスト内であることを
願い予告

describe('test with cache', function(){ 
    require('./requestHandler'); 
    let originalValues; 

    beforeEach(function() { 
     originalValues = require.cache[ require.resolve('./requestHandler') ].exports; 

     require.cache[ require.resolve('./requestHandler') ].exports = { 
        value:5, 
        process: function(req, res) { 
         //other stuff  
        } 
      }; 

    }); 

    afterEach(function() {   
     require.cache[ require.resolve('./requestHandler') ].exports = originalValues;   
    }); 

    it('should pass', function(){ 
     const server = require('./app.js'); 

     var fvtPromise = new Promise(function(fulfill) { 
      request(server) 
      .get('/validate') 
      .expect(200) 
      .end(function(err, res) { 
       if (err) { 
       throw err; 
       } 
       res.body.should.equal(true); 
       fulfill(null); 
      }); 
     }); 
     fvtPromise.done(function() { 
      done(); 
     }); 

     expect(true).to.be.true; 
    }); 
}); 
関連する問題