2016-02-17 64 views
1

我已經檢查了其他類似於我的問題的問題。但是這個問題在各種情況下顯然可能不同。 角茉莉花測試抱怨 類型錯誤:「未定義」不是(評估「fields.forEach」)的對象,在discoverDependentFields茉莉花測試抱怨'undefined'不是對象

這裏是我的discoverDependentFields功能

discoverDependentFields($scope.response.Fields); 

function discoverDependentFields(fields) { 
    fields.forEach(function (field) { 
     field.DependencyFieldEvaluated = ''; 
     if (field.DependencyField) { 
      var foundFields = fields.filter(function (fieldToFind) { return fieldToFind.Name === field.DependencyField; }); 
      if (foundFields.length === 1) { 
       field.DependencyFieldEvaluated = foundFields[0]; 
      } 
     } 
    }); 
} 

,並在測試中,我有這個有點

 this.controller('MyController', { 
      '$scope': this.scope,        
      } 
     }); 

this.scope.response.Fields = [ 
       { 
        Name: "UserIdentity", 
        Value: { 
         "FirstName": "John" 
        }, 
        PropertyName: "User.Identity" 
       } 
      ]; 

我用field.DependencyFieldEvaluated的值的函數的指令,這樣

function dependencyMet(field) { 
        var dependentField = field.DependencyFieldEvaluated; 

        var met = compareToDependencyValue(field, dependentField.Value); 
        return met; 
       } 

我不知道它爲什麼抱怨

+0

只是猜測這裏,但考慮到它的樣子'discoverDependentFields'被立即執行,應該不是你設置了'scope.response.Fields' *之前*運行'this.controller('MyController'...)'? – Phil

回答

2

如果

discoverDependentFields($scope.response.Fields); 

是在你的控制線,那麼你需要設置$scope.response.Fields數據以前實例化控制器。換句話說,交換操作的順序,在您的測試是

this.scope = {}; 
// or maybe this.scope = $rootScope.$new() 

this.scope.response = { 
    Fields: [{ 
     Name: "UserIdentity", 
     Value: { 
      FirstName: "John" 
     }, 
     PropertyName: "User.Identity" 
    }] 
}; 

this.controller('MyController', { 
    $scope: this.scope, 
}); 
+0

通過交換,我現在得到這個新的錯誤。 TypeError:'undefined'不是一個對象(評估'this.scope.response') – Maryam

+0

我假設你已經有了你的作用域上的'response'對象屬性。檢查我上面的編輯 – Phil

+0

謝謝菲爾,this.scope沒有定義。我想知道爲什麼它在我將discoverDependentFields位添加到控制器之前工作。例如我有$ scope.completeApplicationFields = $ filter(「isNamedField」)(false,nonPrimaryFields,$ scope.response.Fields);和測試的方式是這樣的 – Maryam