Webpack单元测试,e2e测试
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Webpack单元测试,e2e测试此篇⽂章是续,主要说明单元测试与e2e测试的基本配置以及相关应⽤。
⼀、单元测试
实现单元测试框架的搭建、es6语法的应⽤、以及测试覆盖率的引⼊。
1. 需要安装的项⽬:
jasmine:单元测试库
karma:测试框架,配置选择phantomjs浏览器
karma-jasmine:操作jasmine的插件
karma-webpack:webpack与karma的连接
mock:⽤于数据模拟,⽤'npm install --save-dev mockjs'安装
karma-coverage:测试覆盖率报表
karma-spec-reporter:命令⾏输出测试⽤户的运⾏结果
babel-plugin-istanbul: 测试覆盖率显⽰未通过webpack打包的源码
由于babel-plugin-istanbul是bable的⼀个插件,所以需要修改.babelrc⽂件,代码如下:
{
"presets":["es2015","stage-2"],
"plugins": ["istanbul"] //这句话是重点
}
2. 配置参数及运⾏命令:
运⾏命令.\node_modules\.bin\karma start .\test\karma.conf.js
karma命令为私有安装,karma配置⽂件指定在test⽂件夹下。
配置⽂件如下:
module.exports = function(config) {
config.set({
// 基路径:表⽰karma从那个位置开始找⽂件
basePath: '',
// 框架
frameworks: ['jasmine'],
// 测试的⼊⼝⽂件
files: ['../test/unit/index.js'],
// 排除的⽂件,可以是正则
exclude: [
],
// 对指定⽂件的preprocess(预处理)
preprocessors: {
'../test/unit/index.js': ['webpack', 'sourcemap'],
'../src/**/*.js': ['webpack','sourcemap', 'coverage', 'coverage'] //表⽰那些代码需要⽣成测试覆盖率报表
},
// 结果报表
reporters: ['progress'],
// 服务器端⼝
port: 9876,
// 报表中是否有颜⾊区分
colors: true,
// 输出的⽇志级别
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG logLevel: config.LOG_INFO,
// ⽂件变化是否⾃动刷新
autoWatch: true,
// 测试的测试器环境
browsers: ['PhantomJS'],
// 是否依附浏览器运⾏
// if true, Karma captures browsers, runs the tests and exits
singleRun: false,
// 并发个数,同时⽀持在多少个浏览器运⾏
// how many browser should be started simultaneous
concurrency: Infinity,
//webpack配置
webpack: webpackConfig,
//代码覆盖率配置节点
coverageReporter:{
dir: './converage',
reporters:[
{ type: 'lcov', subdir: '.' },
{type: 'text-summary'}
],
}
})
}
*.spec.js(测试代码)如下:
import {init} from '../../src/ma'
import data from '../mocks/demo'
describe('demo_spec', function(){
it('body',() => {
init();
let button = document.querySelector('.btn');
button.textContent = data.btnName;
expect(button.textContent).toEqual(data.btnName);
})
});
src/ma:会向dom插件⼀个button标签
mocks/demo.js的代码:
import Mock from 'mockjs';
var template = {
'title': 'Demo01',
'btnName|1-3': '*'
}
export default Mock.mock(template);
mocks/demo:⽤mockjs模拟的⼀些数据
3. 运⾏结果
⼆、e2e(模拟⽤户⾏为的测试)
1. 需要安装的npm包
selenium-server:webdriver测试服务器的nodejs搭建
nightwatch:对selenium-server的包装,简化其配置
chromedriver:selenium的chrome测试环境插件,如果是firefox、ie等都需要重新下测试环境插件。
2. 原理简要说明
selenium-server由于浏览器同源策略(域名、协议、端⼝相同才是同源,如不明⽩可以baidu)的限制,selenimue就以代理的⽅式进⾏⽬标站点的测试(也就是测试环境跑的浏览器连接是selenium-server产⽣的代理服务器),selenium-server代理服务器=selenium核⼼Js + 测试⽬标站点(proxy)。
3. 相关代码展⽰
nightwatch配置参数:
module.exports = {
"src_folders": ["test/e2e/specs"],
"selenium":{
"start_process":true,
"server_path": "node_modules/selenium-server/lib/runner/selenium-server-standalone-3.3.1.jar",
"host": "127.0.0.1",
"port": 9538,
"cli_args":{
"webdriver.chrome.driver": require('chromedriver').path
}
},
"test_settings":{
"default": {
"selenium_port": 9538,
"selenium-host": "127.0.0.1",
"silent": true,
"globals":{
"devServerURL": "http://localhost:8080"
}
},
"chrome":{
"desiredCapabilities": {
"browserName": "chrome",
"javascriptEnabled": true,
"acceptSslCerts": true
}
}
}
}
selenium.server_path指向为selenium的jar包
selenium.cli_args:配置运⾏时的必要参数,webdriver.chrome.driver指定适合selenium的chrome安装位置
test.default.globals.devServerURL:需要测试的⽬标站点,此站点必须处于活动状态。
测试⽤例代码:
module.exports = {
"default e2e": function(browser){
var devServer = browser.globals.devServerURL;
var driver = browser.url(devServer)
.waitForElementVisible(".btn", 5000)
.setValue('.btn', 'e2e产⽣的内容');
browser.getText('.btn', function(result){
console.log(result.value);
});
browser.end();
}
}
nightwatch相关api可以
运⾏e2e的命令.\node_modules\.bin\nightwatch --config ".\test\e2e\runner.js" --env chrome。