testing - 在事件内部运行断言

标签 testing casperjs

我有以下内容:

casper.then(function addToBag(){
    this.evaluate(function (){
        //register sub method - then emit custom event
        mns.msg.sub("/ajax/success/addToCart" + $("[name=productCode]").val(), function (response) {
            casper.emit('addToCart.loaded');
        });
        //trigger add to cart click
        $('.product-selection input[type=submit]').click();
    });
});

点击触发器激活发射,在事件函数内:

casper.on("addToCart.loaded", function checkAddToCartResponse(){
    console.log("Added");
    test.assert(true,'Add to cart successful');
}),

但是,它似乎没有运行 - 这是在事件结束时运行测试的正确方法吗?

最佳答案

事件没有发出,因为在页面上下文中(在 evaluate 上下文中)没有 casper 实例。

您需要设置一些标志以指示事件已发出。

casper.then(function addToBag(){    
    this.evaluate(function (){
        //register sub method - then emit custom event
        window.casperEventEmitted = null;
        mns.msg.sub("/ajax/success/addToCart" + $("[name=productCode]").val(), function (response) {
            window.casperEventEmitted = 'addToCart.loaded';
        });
        //trigger add to cart click
        $('.product-selection input[type=submit]').click();
    });
});
// wait here

然后等待事件被设置

var timeout = 10000; // msec, some sensible timeout for your event
casper.waitFor(function check() {
    return this.getGlobal('casperEventEmitted') == 'addToCart.loaded';
}, function then() {
    return this.evaluate(function() {
        window.casperEventEmitted = null; // reset for next time
    });
    this.test.pass("Event triggered");
}, function onTimeout(){
    this.test.fail("Event triggered");
}, timeout);

当然,管理队列中的事件而不是单个字符串会更好。

好消息是没有像在 other answer 的情况下发生的自定义事件那样脱离控制流。 .

关于testing - 在事件内部运行断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23538004/

相关文章:

javascript - 为什么在编写 JavaScript 测试时使用 beforeEach()?

javascript - 为什么我得到第一个数组项未定义?

javascript - 点击每个onclick,其中onclick属性随机变化

android - 如何在 Android 中运行 CasperJS 文件?

phantomjs - 网页上的 Casperjs 状态失败

testing - 软件发布前的测试流程是什么?

java - 我可以在 java 的父选项卡和子选项卡中并行运行测试吗? ( Selenium 测试NG)

javascript - 在执行其余测试时保持 NodeJs 服务器运行

visual-studio - Visual Studio 云测试 : Deleting uwanted load tests

linux - 附加到 PID 的 GDB - 无法访问内存地址