在事件中运行assert

时间:2014-05-08 09:36:14

标签: 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();
    });
});

单击触发器激活事件函数内的emit:

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

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

2 个答案:

答案 0 :(得分:1)

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

您需要设置一些发出事件的标志。

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那样的自定义事件会发生。

答案 1 :(得分:1)

evaluate回调中使用

console.log("casper-event:add:[1234]");

然后就可以这样做(未经测试):

casper.on('remote.message', function(msg) {
   if(msg.indexOf("casper-event:" == 0))
   {
       var event = msg.replace(/^casper-event:/, '').replace(/:.*$/, '');
       var result = JSON.parse(msg.replace(/^casper-event:.*?:/, ''));
       this.emit(event, result);
   }
});

casper.on('add'........