6

When I try to run JSCover with PhantomJS, I see below ERROR:

Steps followed:

1) Run the JSCover Server:

java -jar ~/JSCover/target/dist/JSCover-all.jar -ws --report-dir=report

2) Run the PhantomJS runner with JSCover: *phantomjs --debug=true ~/JSCover/src/test/javascript/lib/PhantomJS/run-jscover-jasmine.js localhost8080/<app>/module/framework/test/SpecRunner.html

TypeError: 'null' is not an object(evaluating''document.body.querySelector('.description').innerText')`

phantomjs://webpage.evaluate():3 phantomjs://webpage.evaluate():22 phantomjs://webpage.evaluate():22 2013-09-19T16:36:07 [DEBUG] WebPage - evaluateJavaScript result QVariant(, ) 2013-09-19T16:36:07 [DEBUG] WebPage - evaluateJavaScript "(function() { return (function () { jscoverage_report('phantom'); })(); })()" 2013-09-19T16:36:07 [DEBUG] WebPage - evaluateJavaScript result QVariant(, ) 2013-09-19T16:36:07 [DEBUG] Network - Resource request error: 5 ( "Operation canceled" ) URL: localhost8080/<app_home>/lib/backbone/1.0.0/backbone.js?cb=0.5381254460662603

4

3 回答 3

1

这是我昨天遇到的一个问题。事实证明,示例脚本不适用于较新的版本,因此我构建了一个适用于 Jasmine 2.X 的新 Phantom 脚本,它修复了它。您可以在我的存储库中找到工作脚本:

https://github.com/tkaplan/PhantomJS-Jasmine

于 2014-02-15T19:23:44.480 回答
0

当我尝试使用 PhantomJS 运行 Jasmine 时,我遇到了同样的问题。我意识到最新版本的 Jasmine-html.js (jasmine-2.0.0-rc2) 不适合 PhantomJS 的 run-jasmine.js (phantomjs-1.9.2-windows)。

在 Jasmine-html.js 的 jasmine-2.0.0-rc2 版本中,如果所有测试都通过,则 '.description' 类不可用。仅当任何测试失败时才会创建此“描述”类。

因此,当我通过所有测试运行 phantomjs 时,我收到上述错误消息。我修改了 run-jasmine.js 以适应 Jasmine-html.js (jasmine-2.0.0-rc2) 来解决这个问题。

于 2013-10-09T07:06:46.763 回答
0

您是否异步加载测试?我将 requirejs 用于模块化 javascript。它还用于加载测试规范:

<script data-main='SpecRunner' src='/test/scripts/libs/require.js'></script>

使用 JSCover 时,run-jscover-jasmine.js脚本不考虑这种异步行为,因此查询中引用的 DOM 节点不存在(目前)。我修改了脚本以将 waitFor 调用延迟 1 秒:

page.open(system.args[1], function(status){
    if (status !== "success") {
        console.log("Unable to access network");
        phantom.exit();
    } else {
        // Added 1s delay here
        window.setTimeout(function() {
            waitFor(function(){
                return page.evaluate(function(){
                    return document.body.querySelector('.symbolSummary .pending') === null
                });
            }, function(){
                var exitCode = page.evaluate(function(){
                    console.log('');
                    console.log(document.body.querySelector('.description').innerText);
                    var list = document.body.querySelectorAll('.results > #details > .specDetail.failed');
                    if (list && list.length > 0) {
                        console.log('');
                        console.log(list.length + ' test(s) FAILED:');
                        for (i = 0; i < list.length; ++i) {
                            var el = list[i],
                                desc = el.querySelector('.description'),
                                msg = el.querySelector('.resultMessage.fail');
                            console.log('');
                            console.log(desc.innerText);
                            console.log(msg.innerText);
                            console.log('');
                        }
                        return 1;
                    } else {
                        console.log(document.body.querySelector('.alert > .passingAlert.bar').innerText);
                        return 0;
                    }
                });
                page.evaluate(function(){
                    jscoverage_report('phantom');
                });
                phantom.exit(exitCode);
            });
        }, 1000);
    }
});

根据加载的代码量,您可能必须增加延迟。

于 2013-11-04T19:10:54.250 回答