首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BlanketJS + Jasmine + RequireJS无代码覆盖率

BlanketJS + Jasmine + RequireJS无代码覆盖率
EN

Stack Overflow用户
提问于 2015-04-23 18:30:46
回答 1查看 296关注 0票数 1

我正在尝试获得与this教程相同的设置。

首先。我的文件结构是:

代码语言:javascript
复制
/assests
/css
/font
/img
/js
    /collection
    /lib
    /model
    /plugin
    /spec
        -> Tests in here
    /view
    SpecRunner.js
    main.js
/templates
index.html
SpecRunner.html

我的SpecRunner.html看起来像这样:

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Jasmine Spec Runner v2.2.0</title>

    <link rel="shortcut icon" type="image/png" href="js/lib/jasmine/jasmine_favicon.png">
    <link rel="stylesheet" href="js/lib/jasmine/jasmine.css">

    <!--
    <script type="text/javascript" src="js/lib/blanket/blanket.js"></script>
    <script type="text/javascript" src="js/lib/jasmine/jasmine.js"></script>
    <script type="text/javascript" src="js/lib/jasmine/jasmine-html.js"></script>
    <script type="text/javascript" src="js/lib/jasmine/boot.js"></script>
    <script type="text/javascript" src="js/lib/blanket/blanket_jasmine.js"></script>
    -->

    <script type="text/javascript" src="js/lib/require/require.js" data-main="js/SpecRunner.js">
    </script>   
</head>

<body>
    <!--This div is to allow the views to render. It's filled with the required garbage tags-->
    <div id="sandbox" style="overflow: hidden; height: 1px;">
        <div id="progress-bar-container">
            <div class="main_content">
            </div>
        </div>
    </div>
</body>
</html>

我的SpecRunner.js看起来像这样:

代码语言:javascript
复制
require.config({
  paths: {
    'jquery' : 'lib/jqm/jquery-1.11.2.min',
    'underscore' : 'lib/underscore/underscore',
    'backbone' : 'lib/backbone/backbone',
        //Testing Dependencies
        'blanket': 'lib/blanket/blanket',
        'jasmine': 'lib/jasmine/jasmine',
        'jasmine-html': 'lib/jasmine/jasmine-html',
        'jasmine-boot' : 'lib/jasmine/boot',
        'jasmine-blanket' : 'lib/blanket/blanket_jasmine'
  },
  shim: {
        backbone: {
          deps: ['underscore', 'jquery'],
          exports: 'Backbone'
        },
       'jasmine-boot' : {
            deps : [ 'jasmine', 'jasmine-html' ],
            exports : 'jasmine'
        },
        'jasmine-html' : {
            deps : [ 'jasmine' ]
        },
        'jasmine-blanket' : {
            deps : [ 'jasmine-boot', 'blanket' ],
            exports : 'blanket'
        },
    }
});

require(['jquery', 'jasmine-boot', 'jasmine-blanket', 'blanket'], function($, jasmine, blanket){
    blanket.options('filter', '../js/');
    blanket.options('antifilter', [ '../js/lib/', 
                                    '../js/plugin/', 
                                    '../js/spec/',
                                    '../js/SpecRunner.js',
                                    '../js/main.js'  ]);
    blanket.options('branchTracking', true); 

    var jasmineEnv = jasmine.getEnv();
    jasmineEnv.addReporter(new jasmine.BlanketReporter());
    jasmineEnv.updateInterval = 1000;

    var specs = [];
    specs.push('../js/spec/view/DetailView');

    $(document).ready(function() {
      require(specs, function(spec) {
        window.onload();
      });
    });   
});

问题是,使用当前的设置,我会遇到这样的情况:控制台只会显示“等待毛毯”并挂起。

我可以通过从SpecRunner.js中移除所有的毛毯和茉莉依赖项,并让它们在SpecRunner.html中运行(即取消对脚本引用的注释),来获得一个有效的版本。然而,这个版本是有缺陷的,因为它没有提供任何全面的代码覆盖率。

我已经尝试了here的建议,但没有成功。

任何建议都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2016-01-21 04:37:36

似乎茉莉花毛毯get挂在它对jasmine.getEnv().currentRunner的引用中。这在Jasmine版本的2.0+中没有定义。console的最后一个输出恰好是'waiting for blanket...‘。在它碎之前。为了解决这个问题,我用下面的代码替换了我的jasmine-blanket中的BlanketReporter代码。

代码语言:javascript
复制
var BlanketReporter = function(savePath, consolidate, useDotNotation) {

    blanket.setupCoverage();
};
BlanketReporter.finished_at = null; // will be updated after all files have been written

BlanketReporter.prototype = {
    specStarted: function(spec) {
        blanket.onTestStart();
    },

    specDone: function(result) {
        var passed = result.status === "passed" ? 1 : 0;
        blanket.onTestDone(1,passed);
    },

    jasmineDone: function() {
        blanket.onTestsDone();
    },

    log: function(str) {
        var console = jasmine.getGlobal().console;

        if (console && console.log) {
            console.log(str);
        }
    }
};

// export public
jasmine.BlanketReporter = BlanketReporter;

//override existing jasmine execute
var originalJasmineExecute = jasmine.getEnv().execute;
jasmine.getEnv().execute = function(){ console.log("waiting for blanket..."); };


blanket.beforeStartTestRunner({
    checkRequirejs:true,
    callback:function(){
        jasmine.getEnv().addReporter(new jasmine.BlanketReporter());
        jasmine.getEnv().execute = originalJasmineExecute;
        jasmine.getEnv().execute();
    }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29820793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档