zoukankan      html  css  js  c++  java
  • express-5 质量保证(2)

    跨页测试###

    跨页测试更有挑战性,因为需要你控制和观测浏览器。
    现在设置一个跨页测试情境的例子。比如,你的网站上有一个包含联系表单的Request Group Rate页面。营销部门想知道客户是从哪个页面点击链接进入Request Group Rate页面的,他们想知道客户是否在查看胡德河之旅或者俄勒冈海岸退潮。关联上它需要有一些隐藏的表单域和JavaScript,并且测试将会涉及进入一个页面,然后点击Request Group Rate并验证隐藏域是否正确填充了。

    • 首先创建一个旅游线路的页面:views/tours/hood-river.handlebars:
    <h1>Hood River Tour</h1> 
    <a class="requestGroupRate"
        href="/tours/request-group-rate">Request Group Rate.
    </a>
    
    • 一个引用页面,views/tours/request-group-rate.handlebars:
    <h1>Request Group Rate</h1> 
    <form>
        <input type="hidden" name="referrer">
        Name: <input type="text" id="fieldName" name="name"><br> 
        Group size: <input type="text" name="groupSize"><br> 
        Email: <input type="email" name="email"><br>
        <input type="submit" value="Submit">
    </form>
    <script>
        $(document).ready(function(){
            $('input[name="referrer"]').val(document.referrer);
        });
    </script>
    
    • 在meadowlark.js中为这些页面创建路由:
    app.get('/tours/hood-river', function(req, res){
        res.render('tours/hood-river'); 
    });
    app.get('/tours/request-group-rate', function(req, res){
        res.render('tours/request-group-rate');
    });
    

    要测试这个功能,需要一个浏览器,或者非常类似浏览器的东西;手动太麻烦了,我们希望它可以自动完成;目前有三种流行的解决方案:Selenium、PhantomJS和Zombie。

     * Selenium: 超级健壮,有丰富的测试支持,但配置较复杂
     * PhantomJS:确实提供了一个非客户端Webkit浏览器(跟Chrome和Safari用的是相同的引擎),所以跟Selenium一样,它也呈现出了非常高水平的现实性。然而它还没提供我们所需的简单的测试断言
     * Zombie:没有使用已有的浏览器引擎,所以它不适合用来测试浏览器的功能特性,但用它来测试基本功能是非常好的; 但目前不支持window;
    
    • 装Zombie: npm install --save-dev zombie

    • 创建一个新目录,简单地称其为qa(跟public/qa区分开)。在这个目录下创建qa/tests-crosspage.js文件:

    var Browser = require('zombie');
    var assert = require('chai').assert;
    var browser;
    
    suite('Cross-Page Tests', function() {
    	setup(function() {
    	  browser = new Browser();	
    	});
    	test('requesting a group rate quote from the hood river tour page' + 
             'should populate the referrer field', function(done) {
           var referrer = 'http://localhost:3000/tours/hood-river'; 
           browser.visit(referrer, function(){
             browser.clickLink('.requestGroupRate', function(){ 
               assert(browser.field('referrer').value === referrer);
               done();
             });	
           });
        });
        test('requesting a group rate from the oregon coast tour page should ' +
              'populate the referrer field', function(done){
            var referrer = 'http://localhost:3000/tours/oregon-coast'; 
            browser.visit(referrer, function(){
              browser.clickLink('.requestGroupRate', function(){ 
                assert(browser.field('referrer').value === referrer);
                done();
              }); 
            });
        });
        test('visiting the "request group rate" page dirctly should result ' + 
              'in an empty referrer field', function(done){
            browser.visit('http://localhost:3000/tours/request-group-rate', 
              function(){
                assert(browser.field('referrer').value === '');
                done();
            });
        });
    });      
    
    

    setup的参数是一个函数,测试框架运行每个测试之前都会执行它,我们在这里为每个测试创建一个新的浏览器实例。
    这里有三个测试。前两个检查如果你来自产品页面,引用页是否正确。方法browser.visit会真正加载页面,页面加载完成后,就会调用回调函数。然后用方法browser.clickLink找到classrequestGroupRate的链接,并访问它。链接目标页面加载完后调用回调函数,我们就到了Request Group Rate页面上。剩下唯一要做的就是断言隐藏域referrer跟我们原来访问的页面是匹配的。browser.field方法会返回 一个DOM元素对象,具有value属性。最后一个测试只是确保直接访问Request Group Rate页面时referrer为空。

    在进行测试之前,必须先启动服务器node meadowlark.js。应该在另一个窗口中启动它,以便看到控制台错误。然后,运行测试看看我们做得怎么样(确保你有全局安装的Mocha:npm install -g mocha):

    mocha -u tdd -R spec qa/tests-crosspage.js 2>/dev/null
    

    注意前面那个命令,我们用的是TDD界面(默认是BDD),还用了一个叫spec的报告。spec报告比默认报告提供的信息要多一些。(等你有上百个测试的时候,你可能还是想用默认报告。)最后,你可能会注意到我们扔掉了错误输出(2>/dev/null)。Mocha会报告失败测试的全部堆栈跟踪。这些信息可能有用,但一般你只想看到哪些测试通过了,哪些失败了。如果你需要更多信息,去掉2>/dev/null就能看到错误的细节了。

    上面的例子有错误####

    逻辑测试###

    用Mocha做逻辑测试; 现在只有一个小小的功能,所以设置它相当容易。另外,因为只有一个组件,也不能做集成测试,所以只添加单元测试。

    • 创建文件qa/tests-unit.js:
    var fortune = require('../lib/fortune.js');
    var expect = require('chai').expect;
    
    suite('Fortune cookie tests', function() {
      test('getFortune() should return a fortune', function() {
      	expect(typeof fortune.getFortune() === 'string');	
      });
    });
    
    
    • 运行Mocha来进行这个新的测试集:
      mocha -u tdd -R spec qa/tests-unit.js

    去毛###

    最早的JavaScript去毛机是Douglas Crockford的JSLint; 此外Anton Kovalyov在2011年创建了JSLint的分支,于是JSHint诞生了。后者比前者更灵活

    • 安装:npm install -g jshint
    • 运行,只要指定源文件名调用它就可以了:`jshint meadowlark.js`

    用Gulp实现自动化###

    持续集成###

    基本上你每次向共享服务器贡献代码时,CI(持续集成)都会运行部分或全部测试。如果所有测试都通过了,通常什么也不会发生。另一方面,如果有测试失败了,后果一般是更加公开。这也是取决于你是如何配置CI的,但一般整个团队都会收到一封邮件说你“搞砸了构建”。

    目前Node中最流行的CI服务器是Travis CI;此外还有Jenkins,TeamCity

  • 相关阅读:
    VS2017专业版和企业版激活密钥
    RabbitMQ卸载重新安装
    RabbitMQ-基本命令操作
    天猫
    铜氨纤维
    四肢很发达,头脑不简单
    运动可以健身健脑
    1 职业天花板来自认识的局限性
    天猫-服饰行业标准
    服装设计都是需要什么
  • 原文地址:https://www.cnblogs.com/jinkspeng/p/4280133.html
Copyright © 2011-2022 走看看