量角器,承诺,参数和闭包

时间:2016-09-27 16:03:54

标签: javascript parameters closures protractor

我现在正在撕掉我头发上的一点点遗骸。 而且我觉得我左膝失去了视力。

我有两个功能。 每个人都正确地获取参数。 我非常非常,非常喜欢一个函数来获取这两个参数。

我有一个超级简单的数据结构:

var stuff = [
          { name: "Stone", id: "cc45" },
          { name: "Hanley", id: "cc78" }
      ];

我希望遍历结构并对每个结构运行一个超级简单的测试。请注意:

  for (var ii = 0; ii < stuff.length; ii++) {
      var aTile = element(by.id(stuff[ii].id));

      aTile.getText().then(
          /* magical solution */
      );
  }

所有我都错过了神奇的解决方案。在版本A(缺乏魔力)中,我可以成功地看到Protractor亲切抓住的文本:

  aTile.getText().then((function (text) {
      console.log(" --Protractor Grab--" + text);
  }));

在版本B(也缺乏魔法)中,我可以成功地看到我希望将量角器抓取的文本与之比较的数据:

  aTile.getText().then((function (test) {
      console.log(" ==Stuff test==" + test);
  })(stuff[ii].name));

我不能做的,无论我拉多少头发,都要让量角器来比较两者。实际上,我需要补充一下:

   expect(protractorGrabbedText).toContain(expectedTextFromStuff);

请亲切的代码,帮助我,我恳求你。

2 个答案:

答案 0 :(得分:3)

它非常简单。 expect()方法可以隐式解析并使用结果与实际数据进行比较。您可以使用下面的内容,

for (var ii = 0; ii < stuff.length; ii++) {
  var aTile = element(by.id(stuff[ii].id)).getText();
  expect(aTile.getText()).toContain(stuff[ii].name) //This will take care of resolving the promises.
 }

方法-2:

由于您使用的是for循环,因此需要使用闭包来获取promise中ii的值。尝试以下代码。

for (var ii = 0; ii < stuff.length; ii++) {
    function closure(index){
        element(by.id(stuff[index].id)).getText().then(function(text){
        expect(text). toContain(stuff[index].name)
     })
   }
 closure(ii)
 }

答案 1 :(得分:2)

我是上面的答案。这应该工作

for (var ii = 0; ii < stuff.length; ii++) {
    var aTile = element(by.id(stuff[ii].id));
    expect(aTile.getText()).toContain(stuff[ii].name)
        }