Switch语句没有返回任何值

时间:2015-09-24 13:41:53

标签: javascript angularjs selenium-webdriver switch-statement protractor

我有一个测试我写的是读取字符串然后接受该字符串并将其应用于switch语句。然后我将字符串与case匹配并设置一个整数值,我将其传递回spec页面,然后将int值传递给我用于if语句的另一个测试。我无法让int传递,所以if语句将无法正常工作。

切换对象:

var appsNotPurchased = 0;
this.checksHomeSublevel = function(mmCode) {
    browser.get('https://iplan-qa.meetingmatrix.com/Home/Index/' + mmCode);
    marketingObjects.level.getText().then(function(text) {
      var homeText = text;
      browser.get('https://iplan-qa.meetingmatrix.com/Home/Apps/' + mmCode);
      expect($('div.apps-subscription > span').getText()).toEqual('iPlan Level: ' + homeText);
      switch (homeText) {
        case 'Select':
          console.log(homeText);
          appsNotPurchased = 6;
          return appsNotPurchased;
          break;
        case 'Content':
          console.log(homeText);
          appsNotPurchased = 0 || 1 || 2 || 3 || 4 || 5 || 6;
          return appsNotPurchased;
          break;
      }


    });

testSpec描述功能:

describe('should upload media: ', function() {

  it('should select add media', function() {
    var mmCode = "ACC0572";
    var appsNotPurchased = appsObjects.checksHomeSublevel(mmCode);
    appsObjects.checksSubLevelSelect(mmCode, appsNotPurchased);
  });

});

我将值传递给的对象:

    this.checksSubLevelSelect = function(mmCode, appsNotPurchased) {

      //counts the apps
      apps.count().then(function(count) {
        expect(count).toEqual(7);
        for (var i = 0; i < count; i++) {
          if (appsPlace == appsNotPurchased) {
            //does something here
          } else {
            //does something here
          }
          appsPlace++;
        }
      });
    };

1 个答案:

答案 0 :(得分:5)

您应该返回一个对象而不是||语句。 return语句也应该写在switch之外而不是里面。

  • 最简单的解决方案是使用存储值的全局变量appsNotPurchased,然后您可以在测试规范中使用它而不返回。但那将是一个糟糕的编码标准。
  • 第二个解决方案是在异步执行量角器时返回函数的承诺。

以下是第二个解决方案的示例 -

this.checksHomeSublevel = function(mmCode) {
    var getval = marketingObjects.level.getText().then(function(text) {
        switch (homeText) {
          case 'Select':
            console.log(homeText);
            appsNotPurchased = [6];
            break;
          case 'Content':
            console.log(homeText);
            appsNotPurchased = [0, 1, 2, 3, 4, 5, 6]; //either use array or object
            break;
          default:
            console.log("Default");
        }
        return appsNotPurchased;
    });
    return protractor.promise.fulfilled(getval);
};

然后将其用作规范中的承诺 -

appsObjects.checksHomeSublevel(mmCode).then(function(appsNotPurchased){
    appsObjects.checksSubLevelSelect(mmCode, appsNotPurchased);
});

现在在您的功能中使用上述结果 -

   this.checksSubLevelSelect = function(mmCode, appsNotPurchased) {

      //counts the apps
      apps.count().then(function(count) {
        expect(count).toEqual(7);
        for (var i = 0; i < count; i++) {
          if (appsPlace == appsNotPurchased[i]) {
            //does something here
          } else {
            //does something here
          }
          appsPlace++;
        }
      });
    };

希望它有所帮助。