比较两个函数的结果

时间:2017-02-09 16:22:32

标签: javascript protractor

一点点新手到protracor但我试图实现的基本上是一个检查(从另一个函数)执行一个动作然后执行相同的检查(从早期的相同功能)。

我已经尝试过以下但不幸的是得到Failed: first is not defined

checkCanvasWidth: {
    value: function () {
        return element(by.css("div[class='canvasWrapper'] > canvas")).getAttribute("width").then(function(width) {
            return width;
        });
    }
},


zoomIn: {
    value: function () {
        this.checkCanvasWidth().then(function (width) {
            var first = width;
            console.log("before:" + width);
        });

        //performs a click
        this.clickZoomIn();

        this.checkCanvasWidth().then(function (width) {
            var second = width;
            console.log("after:" + width);
        });

        expect(first).toBeGreaterThan(second);
    }
}

任何帮助都会受到大力赞赏!

2 个答案:

答案 0 :(得分:0)

在this.checkCanvasWidth()之外定义第一个和第二个。函数创建范围,因此只有与checkCanvasWidth一起使用的函数才能分别访问第一个和第二个。您必须在这些函数上方的范围内定义它们,以便expect函数也可以看到这些变量。

zoomIn: {
    value: function () {
        var first,
            second;
        this.checkCanvasWidth().then(function (width) {
            first = width;
            console.log("before:" + width);
        });

        //performs a click
        this.clickZoomIn();

        this.checkCanvasWidth().then(function (width) {
            second = width;
            console.log("after:" + width);
        });

        expect(first).toBeGreaterThan(second);
    }
}

PS:如果checkCanvasWidth()返回一个承诺,你将不得不重写整个函数,因为你想在第一次和第二次设置之后进行expect()调用。

承诺版本:

zoomIn: {
    value: function () {
        var first,
            second;
        this.checkCanvasWidth().then(function (width) {
            first = width;
            console.log("before:" + width);
            if (first && second) {
                expect(first).toBeGreaterThan(second);
            }
        });

        //performs a click
        this.clickZoomIn();

        this.checkCanvasWidth().then(function (width) {
            second = width;
            if (first && second) {
                expect(first).toBeGreaterThan(second);
            }
        });
    }
}

答案 1 :(得分:0)

您需要为该函数提供变量knife vault show VAULTfirst。 Javascript具有功能范围,因此您定义secondfirst的方式在函数外部无法访问。

因此,当你编写如下代码时,变量second只能被匿名函数访问。

second

因此,您可以在外部声明变量this.checkCanvasWidth().then(function (width) { var second = width; console.log("after:" + width); }); first,以便可以访问它们,然后在then处理程序中设置值以设置值。

second