單元測試

整個網站的model就只有兩個:users和records,也就是說,此時已經實做完整個資料存取的邏輯層,這時需要寫幾個test case來驗證功能是否正確。目前在Node.js上使用的主流單元測試框架是mocha,因此本站使用mocha寫幾個單元測試的案例,並且搭配一個輕便的assert framework should

npm install should --save-dev

只在開發環境需要should這個套件,因此使用--save-dev這個參數。接著開一個test資料夾,新增test_models.js。

describe('test users', function() {
  var uid;

  it('test create', function(done) {
      User.create({username: 'unittest', password: 'unittest'}, function(err, user) {
          assert.exist(user);
          assert.equal(user.username, 'unittest');
          uid = user.uid;
          done();
      });
  });

  it('test auth', function(done) {
      User.authenticate('unittest', 'unittest', function(err, user) {
          assert.exist(user);
          assert.equal(user.username, 'unittest');
          assert.equal(user.uid, uid);
          done();
      });
  });

  it('test del', function(done) {
      User.delById(uid, function() {
          User.findById(uid, function(err, user) {
              assert.not.exist(user);
              assert.equal(err.status, 404);
              done();
          });
      });
  });
});

這邊單元測試只做了一些簡單的case,並沒有將每一個corner case都完整測試。寫單元測試的目的是為了反覆驗證功能是否正常,尤其是這個data model牽扯到google試算表,需要有機制能夠確保相容於之後的試算表版本;或者當要enhance data model時,能夠有一個安心機制來確保不會改壞原本的功能。

有一點很重要,若是直接mocha,八成會噴error,因為整個資料庫是從google試算表取得,受限於網路頻寬,因此要延長mocha的timeout:

mocha --timeout 15000

完整的測試程式在github

results matching ""

    No results matching ""