测试实战

通过前面的介绍后,相信同学们已经对测试有了一定的了解,纸上得来终觉浅,绝知此事要躬行。 理论讲得差不多了,是时候开始实战了,下面我们通过一个栗子 🌰。

需求分析:

  • 输入用户姓名、年龄
  • 输出该用户姓名、年龄信息到用户显示列表

模版结构

<!-- html -->
<section class="control-panel">
  <div class="input-container">
    <label for="name">Name</label>
    <input type="text" id="name" />
  </div>
  <div class="input-container">
    <label for="age">Age</label>
    <input type="text" id="age" />
  </div>
  <button id="btnAddUser" class="button">Add User</button>
</section>
<hr />
<section class="user-output">
  <ul class="user-list"></ul>
</section>

工具类代码

// 输出文字
exports.generateText = (name, age) => {
  return `${name} (${age} years old)`;
}

// 创建一个新元素
exports.createElement = (type, text, className) => {
  const newElement = document.createElement(type);
  newElement.classList.add(className);
  newElement.textContent = text;
  return newElement;
}

// 验证用户输入
exports.validateInput = (text, notEmpty, isNumber) => {
  if (!text) { // 空白符
    return false;
  }
  // user 文字验证
  if (notEmpty && text.trim().length === 0) {
    return false;
  }
  // age 数字验证
  if (isNumber && +text === NaN) {
    return false;
  }
  return true;
}

主逻辑代码

require('./style.css');
const { generateText, createElement, validateInput } = require('../utils/base');
const initApp = () => {
  // 给按钮注册监听事件
  const newUserButton = document.querySelector('#btnAddUser');
  newUserButton.addEventListener('click', addUser);
};

const addUser = () => {
  // 基于用户的输入数据,创建一个新的 HTML 元素
  // 添加到 DOM 树中
  const newUserNameInput = document.querySelector('input#name');
  const newUserAgeInput = document.querySelector('input#age');

  if (
    !validateInput(newUserNameInput.value, true, false) ||
    !validateInput(newUserAgeInput.value, false, true)
  ) {
    return;
  }

  const userList = document.querySelector('.user-list');
  const outputText = generateText(newUserNameInput.value, newUserAgeInput.value);
  const element = createElement('li', outputText, 'user-item');
  userList.appendChild(element);
};
initApp();

接下来,我们开始要测试代码了,首先看看测试代码的现有解决方案。

上次更新: 8/9/2019, 6:13:36 PM