首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >幻影-jscover生成一个TypeError,因为phantom.args不是一个对象。

幻影-jscover生成一个TypeError,因为phantom.args不是一个对象。
EN

Stack Overflow用户
提问于 2015-04-14 12:28:32
回答 1查看 750关注 0票数 1

我想在我遵循手册的覆盖报告中使用js掩护,但是得到了例外情况:

TypeError:未定义不是对象(计算'phantom.args')

以下是我使用的文件:

js-code-overage.xml内容:

代码语言:javascript
复制
        <!-- running jscover for the code coverage -->
    <target name="startjscoverserver">
        <java jar="${jsCover}/JSCover-all.jar" fork="true" spawn="true">
            <jvmarg value="-Dfile.encoding=UTF-8" />  
            <arg value="-ws" />
            <arg value="--document-root=${documentRoot}" />
            <arg value="--report-dir=${reports}/coverage" />
            <arg value="--no-instrument=${documentRoot}/resources/public"/>
            <arg value="--no-            instrument=${documentRoot}/resources/knockoutComponents"/>
            <arg value="--no- instrument=${documentRoot}/resources/public/common"/>
            <arg value="--no-function"/>
            <arg value="--port=8080" />
        </java>

        <waitfor maxwait="5" maxwaitunit="second" checkevery="250" checkeveryunit="millisecond" timeoutproperty="failed">
            <http url="http://localhost:8080/jscoverage.html" />
        </waitfor>
        <fail if="failed" />

        <echo message="JSCover has been run. URL: http://localhost:8080/jscoverage.html" />

    </target>



    <!-- starting the code coverage -->
    <target name="jscodecoverage">
        <exec executable="${phantomJS}/${phantomPath}" failonerror="false">
            <arg line="${phantomJS}/phantom-jscover.js" />
            <arg line="http://localhost:8080/jscoverage.html?http://localhost:7001/myproject/JasmineSpecRunner.html" /> 
        </exec>
    </target>

以及幻影-jscover.js:

代码语言:javascript
复制
(function() {
   function waitFor(testFx, onReady) {
    var condition = false, interval = setInterval(function() {
        if (!condition) {
            condition = (typeof (testFx) === 'string' ? eval(testFx)
                    : testFx());
        } else {
            if (typeof (onReady) === 'string') {
                eval(onReady);
            } else {
                onReady();
            }
            clearInterval(interval);
        }
    }, 100);
}

var url  = phantom.args[0];

var page = require('webpage').create();
var fs   = require('fs');

page.onCallback = function(data) {
    if ('jasminelog' === data.message) {
        fs.write('/dev/stdout', data.data.message, 'w');
    }
};

page.open(url, function(status) {
    if (status !== "success") {
        phantom.exit(1);
    } else {
        waitFor(function() {

            return page.evaluate(function() {
                var reporter = window.jsApiReporter;
                if (window.frames[0]) {
                    reporter = window.frames[0].jsApiReporter;
                }
                return reporter && reporter.finished;
            });
        }, function() {
            page.evaluate(function() {
                var jscoverage_report = window.jscoverage_report;

                if (window.frames[0]) {
                    jscoverage_report = window.frames[0].jscoverage_report;
                }

                if (jscoverage_report) {
                    jscoverage_report('phantom');
                }
            });
            phantom.exit(0);
        });
    }
  });
 }).call(this);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-14 12:32:19

它可能是为较早版本的PhantomJS编写的。 is deprecated

解决办法是使用系统模块:

代码语言:javascript
复制
var url = require('system').args[1];

注意:

第一个总是脚本名,然后是后面的参数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29627345

复制
相关文章

相似问题

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