Skip to main content

前端中的单元测试

在单元测试中,常用的方法论有两个: TDD和BDD。

  • TDD( Test-driven development): 其基本思路是通过测试推动开发的进行。从调用者的角度出发,尝试函数逻辑的各种可能 性,进而辅助性增强代码质量。
  • BDD(Behavior-driven development): 其基本思路是通过预期行为逐步构建功能块。通过与客户讨论,对预期结果有初步的认 知,尝试达到预期效果。

目前前端测试框架有Mocha、 jasmine、 jest 等,它们配合断言库来进行单元测试。断言库包括assert(nodejs 自带断言库)、chai 等,接下来写几个小例子

  • 例1:普通函数测试
import { expect } from 'chai';import add from  '../src/common/add';
describe('加法函数测试', () => {it('应该返回两个数之和', () => {    expect(add(4, 5)).to.be.equal(9);});});

/*    加法函数测试    √ 应该返回两个数之和
    1 passingnpm */
  • 例 2:异步函数测试
import { expect } from 'chai';import asyncFn from('../src/common/asyncFn');
describe('异步函数测试', () => {it('async with done', async () => {    const res = await asyncFn();
    expect(res).to.have.deep.property('status', 200);});});

/*    异步函数测试    √ async with done (176ms)
    1 passing*/
  • 例 3:react 组件测试

需使用 enzyme 库对组件进行渲染

import { expect } from 'chai';import { render } from 'enzyme';
import Foo from './Foo';
describe('<Foo />', () => {it('renders three `.foo-bar`s', () => {    const wrapper = render(<Foo />);    expect(wrapper.find('.foo-bar')).to.have.lengthOf(3);});

/*    <Foo />    √ renders three `.foo-bar`s (176ms)
    1 passing*/