webpack+angular的项目SEED(下)

webpack+angular的项目SEED(上)介绍了项目的构建生产和热编译显示。

介绍

这里就主要来讲测试,敏捷开发好多公司都在做,敏捷开发有许多种方法,但不管采用那一种方法,测试都是必须的,验证代码,验证功能,及时的反馈,及时的修复是保证敏捷开发的基础。所以自动化测试,才能保证开发在快速中仍然可以维护的很好,不会带来新的问题和代码质量问题。

单元测试

karma 可以同时对多个浏览器做单元测试,测试兼顾代码的兼容性。但是karma不包含断言库,所以还需要断言库,在这里我用了mocha+chai而不是Jasmine的。至于为什么说实话我也是刚刚接触自动化测试。没有依赖性,所以就晚上大概了解了下,选mocha主要因为他可扩展性和异步测试的能力。对比可以查看这篇文章,然后由于用到了ES6所以在测试前需要吧代码编译,所以用到了karma-webpack和karma-sourcemap-loader这两个帮助定位代码位置。最后就是karma-mocha-reporter这个帮助我更加清晰的查看测试报告。

Karma.conf.js

module.exports = function (config) {
    config.set({

        // base path that will be used to resolve all patterns (eg. files, exclude)
        basePath: '',


        // frameworks to use
        // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
        frameworks: ['mocha', 'chai'],


        // list of files / patterns to load in the browser
        files: ['app/**/*Spec.js'],


        // list of files to exclude
        exclude: [],


        // preprocess matching files before serving them to the browser
        // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
        preprocessors: {'app/**/*Spec.js': ['webpack', 'sourcemap']},


        // test results reporter to use
        // possible values: 'dots', 'progress'
        // available reporters: https://npmjs.org/browse/keyword/karma-reporter
        reporters: ['mocha'],


        // web server port
        port: 9876,


        // enable / disable colors in the output (reporters and logs)
        colors: true,


        // level of logging
        // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
        logLevel: config.LOG_INFO,


        // enable / disable watching file and executing tests whenever any file changes
        autoWatch: true,


        // start these browsers
        // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
        browsers: ['Chrome'],


        // Continuous Integration mode
        // if true, Karma captures browsers, runs the tests and exits
        singleRun: false,

        // Concurrency level
        // how many browser should be started simultaneous
        concurrency: Infinity,

        webpack: {
            devtool: 'inline-source-map',
            module: {
                loaders: [
                    {test: /\.js/, exclude: [/app\/lib/, /node_modules/], loader: 'babel'},
                    {test: /\.html/, loader: 'raw'},
                    {test: /\.styl$/, loader: 'style!css!stylus'},
                    {test: /\.css$/, loader: 'style!css'}
                ]
            }
        },
        webpackServer: {
            noInfo: true // prevent console spamming when running in Karma!
        },
        plugins: [
            'karma-chrome-launcher',
            'karma-chai',
            'karma-mocha',
            'karma-webpack',
            'karma-sourcemap-loader',
            'karma-mocha-reporter'
        ]
    })
};

KARMA的主要测试配置就在这里了。
KARMA最大的好处就是能监视代码修改,实时的帮你测试代码问题。在开发的同时就能知道会不会有太大的问题。很好的管控了代码。

对了还有一个问题就是对angularJS的测试需要'angular-mocks'的搭配,可以帮你测试
module,controller里面的内容。

navbar.js

let navbar = angular.module('navbar', []);
navbar.controller('navbarCtrl', ['$scope', function ($scope) {
    $scope.links = ['home', 'about'];
}]);

navbar.directive('navbar', function () {
    return {
        restrict: 'AE',
        templateUrl: '/widgets/navbar/navbar.html'
    };
});
export default navbar;

navbar.Spec.js

import angular from 'angular';
import mocks from 'angular-mocks';
import navbar from './navbar';    
describe('navbar', function () {
    let scope;
    beforeEach(angular.mock.module('navbar'));
    beforeEach(angular.mock.inject(function ($rootScope, $controller) {
        scope = $rootScope.$new();
        $controller('navbarCtrl', {$scope: scope});
    }));
    it('Controller测试', function () {
        expect(scope).to.have.property('links').with.length(2);
    });
});

以上是一个简单的angular写的空间NAVBAR的测试。

至于断言库CHAI可以查看官方文档来了解具体的可以断言的内容。

E2E测试

E2E也就是End To End,就是所谓的“用户真实场景”。这个测试比较系统,基于E2E测试的开发也是敏捷开发的一种。angularJS官方实例中已经给了一个E2E的测试例子。使用的工具是protractor。也是angularJS给的测试工具。大致看了API感觉到功能还是很强的。不过说实话没有具体细看每个API,这个文档先留着以后具体问题在看吧。

protractor-conf.js

exports.config = {
    allScriptsTimeout: 10000,

    specs: [
        '*.js'
    ],

    capabilities: {
        'browserName': 'chrome'
    },

    chromeOnly: true,
    baseUrl: 'http://localhost:3000/',
    framework: 'mocha',
    mochaOpts: {
        timeout: 10000
    }
};

记得设置下TIMEOUT时间,以防测试任务功能时间太长timeout了

HomeE2E.js

var chai = require('chai');
var chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);
var expect = chai.expect;

describe('HomeE2E', function() {
    beforeEach(function() {
        browser.get('/');
    });

    it('测试LINKS', function() {
        var todoList = element.all(by.repeater('x in links'));
        expect(todoList.get(1).getText()).to.eventually.equal('about');
        expect(todoList.get(0).getText()).to.eventually.equal('home');
    });

    it('测试输入框', function() {
        var HomeInput = element(by.model('HomeInput'));
        var Hometext = element(by.id('Hometext'));
        HomeInput.sendKeys('nexus');
        expect(Hometext.getText()).to.eventually.equal('nexus');
        HomeInput.clear();
    });
});

以上是一个简单的测试代码。

测试覆盖率

karma-coverage这个是一个KARMA判断测试代码覆盖率的一个工具,但是由于我们用的ES6编写的源代码,所以这个覆盖率测试结果是编译后的代码,测试的覆盖率没有实际意义。所以这个工具没有出现在我的项目中。不过代码覆盖率测试还是很重要的。在不使用ES6的情况下还是可以使用karma-coverage来统计下单元测试的代码覆盖率的。(我还在找ES6的代码覆盖率的解决方法,毕竟ES6是未来的一个方向。所以提前问道也是有好处的。)

有兴趣的可以去zchq88_seed这个项目看看。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要了解一下Webpack和Layui分别是什么。Webpack是一个模块打包工具,它可以将多个模块打包成一个或多个文件。而Layui是一个基于jQuery的前端UI框架,它提供了一些常用的UI组件和简洁的CSS样式。 下面是一些简单的步骤,可以帮助你创建一个基于Webpack和Layui的后台项目: 1.初始化项目 在命令行中创建一个新的项目文件夹并初始化它: ``` mkdir my-project cd my-project npm init -y ``` 2.安装依赖 安装Webpack和Layui的依赖包: ``` npm install webpack webpack-cli layui --save-dev ``` 3.创建Webpack配置文件 在项目根目录下创建一个名为`webpack.config.js`的文件,并添加以下代码: ```javascript const path = require('path'); module.exports = { entry: './src/index.js', output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist') } }; ``` 这个配置文件告诉Webpack将`src/index.js`作为入口文件,将打包后的文件输出到`dist/bundle.js`。 4.创建HTML文件和Layui样式 在项目根目录下创建一个名为`index.html`的文件,并添加以下代码: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>My App</title> <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/layui/2.5.6/css/layui.css"> </head> <body> <div class="layui-container"> <div class="layui-row"> <div class="layui-col-md12"> <h1>Hello, World!</h1> </div> </div> </div> <script src="bundle.js"></script> </body> </html> ``` 这个HTML文件引入了Layui的CSS文件和Webpack打包后的JavaScript文件。 在项目根目录下创建一个名为`style.css`的文件,并添加以下代码: ```css body { background-color: #f2f2f2; } ``` 这个CSS文件设置了页面的背景颜色。 5.创建JavaScript文件 在项目根目录下创建一个名为`src/index.js`的文件,并添加以下代码: ```javascript import '../style.css'; import layui from 'layui'; layui.use(function(){ var $ = layui.$; console.log($); }); ``` 这个JavaScript文件引入了上一步创建的CSS文件,并使用了Layui的模块。 6.打包项目 在命令行中运行以下命令打包项目: ``` npx webpack ``` 这个命令将会使用Webpack打包项目,并将打包后的文件输出到`dist/bundle.js`。 7.运行项目 在浏览器中打开`index.html`文件,你应该能够看到一个灰色背景的页面,并在浏览器的控制台中看到Layui输出的一些信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值