前端自动化测试实践02—jest基本语法

前端自动化测试实践02—jest基本语法

Write By CS逍遥剑仙
我的主页: www.csxiaoyao.com
GitHub: github.com/csxiaoyaojianxian
Email: sunjianfeng@csxiaoyao.com

本节代码地址 https://github.com/csxiaoyaojianxian/JavaScriptStudy 下的自动化测试目录

1. matchers 匹配器

测试工具中最基本的就是断言匹配器,下面是 jest 中常用的匹配器。

【 toBe 】【 toEqual 】

test('jest匹配器', () => {
	const a = 1;
    const b = { one: 1 };
    expect(a).toBe(1);
    // expect(b).toBe({ one: 1 }); // false 地址不同
    expect(b).toEqual({ one: 1 });
})

【 toBeNull 】【 toBeUndefined 】【 toBeDefined 】【 toBeTruthy 】【 toBeFalsy 】

test('jest匹配器', () => {
	expect(null).toBeNull();
})

【 not 】

test('jest匹配器', () => {
	expect(1).not.toBeFalsy();
})

Number

【 toBeCloseTo 】【 toBeGreaterThan 】【 toBeLessThan 】【 toBeGreaterThanOrEqual 】【 toBeLessThanOrEqual 】

test('jest匹配器', () => {
    expect(10).toBeGreaterThanOrEqual(10);
    expect(0.1 + 0.2).toBeCloseTo(0.3);
})

String

【 toMatch 】

test('jest匹配器', () => {
	expect('www.csxiaoyao.com').toMatch('csxiaoyao');
})

Array/Set

【 toContain 】

test('jest匹配器', () => {
    const a = ['www', 'csxiaoyao', 'com'];
    expect(a).toContain('csxiaoyao');
    expect(new Set(a)).toContain('csxiaoyao');
})

Object

【 toMatchObject 】

test('jest匹配器', () => {
    expect({ data: { success: true } }).toMatchObject({ data: { success: true } });
})

异常

【 toThrow 】

test('jest匹配器', () => {
    const a = () => { throw new Error('this is a new error') };
    expect(a).toThrow();
    expect(a).toThrow('this is a new error');
    expect(a).toThrow(/this is a new error/);
    // expect(a).not.toThrow(); // 没有抛出异常
})

其他

【 any 】…

2. hook 钩子函数

beforeAll / afterAll / beforeEach / afterEach

beforeAll(() => {
	console.log('beforeAll')
})
afterAll(() => {
	console.log('afterAll')
})
// 每个用例执行前执行,一般用于针对不同用例初始化不同的实例对象
beforeEach(() => {
	console.log('beforeEach')
    // 实例化
    counter = new Counter()
})
afterEach(() => {
	console.log('afterEach')
})

3. describe 分组

可以用于限定作用域,可以与钩子函数配合使用,写在不同层级的钩子函数,作用域不同

describe('测试分组和钩子函数', () => {
    let counter = null
    // 外层 beforeEach
    beforeEach(() => { counter = new Counter() })
    // 分组1
    describe('测试分组1代码', () => {
        // 【 使用 describe 限定作用域 】
        // 内层 beforeEach 不会对后面的同级 describe 产生影响
        beforeEach(() => { console.log('beforeEach test group1') })
        test('xxx', () => { /* ... */ })
        // ...
    })
    // 分组2
    describe('测试分组2代码', () => {
        test('xxx', { /* ... */ })
        // ...
    })
})

4. only 跳过 case

test('该 case 被跳过', () => { /* ... */ })
test.only('只测试这个用例,跳过其他 case', () =>{ /* ... */ })
test('该 case 被跳过', () => { /* ... */ })

5. snapshot 快照测试

快照测试适用于配置文件、UI等内容的测试,快照保存上次运行的结果存储在 __snapshots__ 下,如果两次执行结果不一致则不通过,需要检查后更新快照,按 u 更新全部快照,按 i 进入交互式单独更新。例如测试下面的配置文件 snapshot.js

// 固定值
export const generateConfig1 = () => {
    return {
        server: 'http://localhost',
        port: 8080
    }
}
// 存在变化的时间值
export const generateConfig2 = () => {
    return {
        server: 'http://localhost',
        port: 8080,
        time: new Date()
    }
}

编写测试用例,注意匹配时间类变化值

import { generateConfig1, generateConfig2 } from "./11-snapshot";
test("测试 generateConfig1 函数", () => {
	expect(generateConfig1()).toMatchSnapshot();
});
test("测试 generateConfig2 函数", () => {
	expect(generateConfig2()).toMatchSnapshot({
		// 用于匹配时间类变化的值
        time: expect.any(Date)
	});
});

inline snapshot,可以将快照保存在用例中,需要安装 prettier 模块

$ npm install prettier --save

编写测试用例

test("测试 generateConfig2 函数 inline", () => {
	expect(generateConfig2()).toMatchInlineSnapshot({
		time: expect.any(Date)
	});
});

执行后快照保存在用例文件中

test("测试 generateConfig2 函数 inline", () => {
	expect(generateConfig2()).toMatchInlineSnapshot({
			time: expect.any(Date)
    	},
        `
        Object {
            "port": 8080,
            "server": "http://localhost",
            "time": Any<Date>,
        }
  		`
	);
});

6. DOM 测试

dom 测试一般用于测试 UI,例如需要测试下面 jquery 操作 dom 的代码 dom.js

import { jsdom } from 'jsdom'
import $ from 'jquery'
const addDivToBody = () => {
	$('body').append('<div/>')
};
export default addDivToBody

编写测试用例,node 不具备 dom,因此 jest 在 node 环境下模拟了 dom api — jsDom

import addDivToBody from './dom'
import $ from 'jquery'
test('测试 addDivToBody', () => {
    addDivToBody()
    addDivToBody()
    expect($('body').find('div').length).toBe(2)
})

### 回答1: JavaScript 前端自动化是指使用 JavaScript 脚本来自动完成前端工作流程中的一些任务,以提高开发效率和代码质量。 常见的前端自动化任务包括: - 代码构建:使用工具来合并、压缩和优化代码,减少文件体积并提高性能。 - 代码检查:使用工具来检查代码是否符合规范、是否有语法错误等。 - 代码测试:使用工具来对代码进行自动化测试,以确保代码的正确性。 JavaScript 前端自动化常用的工具包括: - Grunt:用于构建、测试和部署项目的自动化工具。 - Gulp:基于流的构建工具,可以快速处理大量的文件。 - Webpack:用于模块化管理 JavaScript 代码的构建工具。 ### 回答2: JavaScript前端自动化是指利用各种工具和技术来提高前端开发效率和质量的过程。它包括自动化构建、自动化测试、自动化部署等方面。 首先,自动化构建是前端自动化中的重要环节。通过使用构建工具如Webpack,Gulp等,我们可以将源代码进行打包、压缩、合并,以及处理各种资源文件如样式文件、图片等,从而减少手动操作,提高项目开发效率。 其次,自动化测试也是前端自动化中的重要组成部分。我们可以通过使用Mocha、Jest等测试框架,编写针对前端页面的单元测试和集成测试,以确保代码的正确性和稳定性。同时,还可以使用工具进行代码质量检查和代码覆盖率分析,帮助开发人员发现和修复潜在的问题。 最后,自动化部署是前端自动化中不可或缺的一环。通过使用CI/CD工具如Jenkins、Travis CI等,我们可以实现代码的自动构建、测试、部署到服务器的过程,减少人工操作,提高部署效率和一致性。 总之,JavaScript前端自动化是基于各种工具和技术来提高前端开发效率和质量的过程。它包括自动化构建、自动化测试和自动化部署等方面,通过减少手动操作和提高自动化程度,帮助开发人员更加高效地进行前端开发工作。 ### 回答3: JavaScript 前端自动化是指利用各种工具和技术来简化和优化前端开发流程的过程。这种自动化可以帮助开发者提高工作效率,减少重复性的劳动,同时还能够确保代码质量和可维护性。 首先,JavaScript前端自动化可以通过构建工具来实现。流行的构建工具如Webpack和Gulp可以帮助开发者自动化处理各种任务,如代码打包、资源压缩、文件合并等等。通过设置合理的配置,开发者可以在代码开发的同时自动进行这些繁琐的任务,从而减轻开发负担。 其次,自动化测试也是JavaScript前端自动化的重要组成部分。开发者可以使用各种测试工具和框架,如Jasmine和Mocha,来编写自动化测试用例。这些测试可以检查代码的正确性、功能的完整性和性能的表现,并能自动运行以减少手动测试的工作量,同时还能够及早发现和修复潜在的问题。 第三,持续集成和部署也是前端自动化的一部分。开发者可以借助Git和GitHub等工具来实现代码的版本控制和协作开发,并结合持续集成工具如Travis CI和Jenkins以自动化地构建、测试和部署代码。这可以确保团队的代码始终保持在一个稳定的状态,并能够及时部署到生产环境中。 最后,自动化文档生成也是前端自动化的一项重要任务。通过使用工具如JSDoc、Swagger等,开发者可以从代码中自动生成详细的文档,包括函数和模块的说明、参数和返回值的描述等等。这可以帮助团队成员更好地理解代码和API的使用,提高项目的可维护性和易读性。 综上所述,JavaScript前端自动化通过运用各种工具和技术,从构建、测试、部署到文档生成等方面实现了流程的自动化和优化,为开发者提供了更高效、更稳定的开发环境,并能够提高代码的质量和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值