Skip to content

Latest commit

 

History

History
154 lines (109 loc) · 3.21 KB

004003-test.md

File metadata and controls

154 lines (109 loc) · 3.21 KB

測試

���## 單元測試:驗證 model �設置正確

相關檔案路徑

${project_home}/express-example/test/unit/task.test.js

開始測試前準備

  before(async function () {
    // 初始資料庫
    await require('../../models').sequelize.sync();
  });

  beforeEach(function () {
    // 載入預計測試的 model,確保 require 可以正確完成
    this.User = require('../../models').User;
    this.Task = require('../../models').Task;
  });

測試案例

  describe('create', function () {
    it('creates a task',async function () {
      let user = await this.User.create({
        username: 'johndoe'
      });
      let task = await this.Task.create({
        title: 'a title',
        UserId: user.id
      });
      expect(task.title).to.equal('a title');

    });
  });

執行 npm run test-unit 確認運行結果

  models/task
    create
      ✓ creates a task

整合測試:定義 API spec

相關檔案路徑

${project_home}/express-example/test/integration/user-creation-api.test.js

開始測試前準備

  before(async function () {
      await require('../../models').sequelize.sync();
  });
  
  beforeEach(async function () {
    this.models = require('../../models');
    await this.models.Task.destroy({ truncate: true })
    await this.models.User.destroy({ truncate: true })

  });

測試案例

  
  it('透過 api 取得特定 user 之所有 task list 資料', async function () {
    // 建立測試資料
    let username = 'johndoe';
    let user = await this.models.User.create({
      username
    });
    
    await this.models.Task.create({
      title: 'johndoe task',
      UserId: user.id
    });

    // 呼叫 API 取得資料
    let response = await request(app).get(`/api/users/${username}/tasks`);
    let result = response.body;

    // 確認資料結構
    expect(result.tasks).to.be.an('array');
    expect(result.tasks[0])
      .to.be.an('object')
      .and.to.have.property("title");
  });

  it('透過 api 新增特定 user 之 task 資料', async function () {

    // 建立測試資料
    let username = 'andy';
    await this.models.User.create({
      username
    });

    let taskData = {
      title: "andy task"
    }

    // 呼叫 API 新增 task
    let response = await request(app)
      .post(`/api/users/${username}/tasks/create`)
      .send(taskData);
    let result = response.body;
    
    // 確認資料結構
    expect(result.task)
      .to.be.an('object')
      .and.to.have.property("title");
  });



�因為是測試先行,尚未實作 API,因此在這邊運作下列指令時

npm run test-integration

將會出現下面錯誤訊息

    1) 透過 api 取得特定 user 之所有 task list 資料
    2) 透過 api 新增特定 user 之 task 資料

  0 passing (513ms)
  2 failing

  1) user creation page
       透過 api 取得特定 user 之所有 task list 資料:
     Error: expected undefined to be an array
      at Assertion.assert 
  2) user creation page
       透過 api 新增特定 user 之 task 資料:
     Error: expected undefined to be an object

下一節將實作 API 並且�在前台尚未開始使用 API 時,透過 test �case 驗證 API 運作正常。