CasperJS/PhantomJS ES6 Promise Polyfill

Rya*_*fro 7 javascript testing phantomjs casperjs ecmascript-6

我目前正在尝试使用PhantomJS和CasperJS进行端到端测试.我遇到的是PhantomJS缺乏承诺的情况.目前我们的项目实施它们.该应用程序仅用于本机支持promises的Google Chrome.

在运行我的测试时,我收到错误: 错误:ReferenceError:找不到变量:Promise

这似乎是因为PhantomJS中当前版本的Webkit不支持promises.我意识到SlimerJS确实通过Gecko提供了这种支持,但我们的应用程序在Chrome中运行,因此我希望测试在Webkit中进行.

我一直在努力的是将一个ES6 promise polyfill注入Phantom,以便正确地进行测试.我已经使用了Casper JS的injectjs以及casper.options.clientScripts.push - 两者似乎仍然缺乏对promises问题的支持.

我注意到其他人在CasperJS的github支持中说他们已经通过polyfill工作了但是我不确定他们是如何做到的,因为没有提供例子.

我已经包含了我当前脚本的一个示例.如果有人处理了这个问题并找到了解决问题的方法,那将非常感谢.先感谢您!

casper.test.begin('Example test loading', 3, function(test) {

    casper.options.clientScripts.push("node_modules/es6-promise/es6-promise.js");

    casper.start('http://localhost:8080/', function() {
        this.captureSelector('stuff.png', 'html');
    });

    casper.on("remote.message", function(msg) {
        this.echo("Console: " + msg);
    });

    casper.on("page.error", function(msg, trace) {
        this.echo("Error: " + msg);
    });

    casper.on("resource.error", function(resourceError) {
        this.echo("ResourceError: " + JSON.stringify(resourceError, undefined, 4));
    });

    casper.on("page.initialized", function(page) {
        page.onResourceTimeout = function(request) {
            console.log('Response Timeout (#' + request.id + '): ' + JSON.stringify(request));
        };
    });

    casper.then(function() {
        test.assertTitle('Example Title', 'Example title is incorrect');
    });

    casper.run(function() {
        test.done();
    });
});
Run Code Online (Sandbox Code Playgroud)

h7r*_*h7r 5

我偶然发现了PhantomJS中没有正确ES6支持的相同问题.我也试图通过使用来克服这个问题,es6-promise和你一样,仍然有未定义的Promises.

通过babel-polyfill解决问题来取代它.

一旦你这样做了

npm install --save-dev babel-polyfill
Run Code Online (Sandbox Code Playgroud)

你可以替换clientScripts使用

casper.options.clientScripts.push("node_modules/babel-polyfill/dist/polyfill.js")
Run Code Online (Sandbox Code Playgroud)

注意:我没有花时间去理解为什么会遇到问题,es6-promise而且我在这个代码库中唯一的ES6功能是Promises,所以IMMV.