js-data-angular 模型中的单元测试承诺
Unit testing promises in js-data-angular models
我们在项目中使用 js-data
和 js-data-angular
。
我有以下型号:
(function () {
'use strict';
angular.module('dash.models')
.factory('Diagnosis', ['DS', function (DS) {
function transform(resourcename, attrs, cb) {
attrs.icd9codes.forEach(function (el) {
delete el.add;
});
cb(null, attrs);
}
this.transform = transform;
return DS.defineResource({
name: 'diagnosis',
idAttribute: 'id',
endpoint: '/diagnosis',
baseUrl: '/api',
beforeCreate: transform,
beforeUpdate: transform
});
}]);
}());
以及对所述模型的以下调用:
var startEditing = self.startEditing = function(parentScope, diagnosis) {
Diagnosis.findAll({
deep:true
}, {
endpoint: '/diagnosis/' + diagnosis.id
}).then(function(d) {
$scope.diagnosis = d;
$scope.inScope = true;
});
};
在我的单元测试中,我这样模拟调用:
var diagDeferred = _$q_.defer();
diagDeferred.resolve({
'name': 'Breast',
'categories': null,
'id': '026c7cd0-14ef-4312-a8f1-2092107b0e50',
'icd9codes': [{id: '1', code: '001', description: 'ICD9 Code'}]
});
spyOn(Diagnosis, 'findAll').and.returnValue(diagDeferred.promise);
而实际的调用是模拟的,没有执行的是 [=17] 的 .then
中的函数(我找不到关于如何完成此操作的任何可靠信息) =]
我知道代码有效,但我需要用单元测试来覆盖它,我快干了。
谢谢。
我想你忘了在测试中调用 $scope.digest()
。这是一个工作 fiddle。
调用 startEditing()
后,您应该调用 $scope.$digest()
以便执行模拟 promise
并且您可以在 then
块中获取数据。希望对你有帮助。
我们在项目中使用 js-data
和 js-data-angular
。
我有以下型号:
(function () {
'use strict';
angular.module('dash.models')
.factory('Diagnosis', ['DS', function (DS) {
function transform(resourcename, attrs, cb) {
attrs.icd9codes.forEach(function (el) {
delete el.add;
});
cb(null, attrs);
}
this.transform = transform;
return DS.defineResource({
name: 'diagnosis',
idAttribute: 'id',
endpoint: '/diagnosis',
baseUrl: '/api',
beforeCreate: transform,
beforeUpdate: transform
});
}]);
}());
以及对所述模型的以下调用:
var startEditing = self.startEditing = function(parentScope, diagnosis) {
Diagnosis.findAll({
deep:true
}, {
endpoint: '/diagnosis/' + diagnosis.id
}).then(function(d) {
$scope.diagnosis = d;
$scope.inScope = true;
});
};
在我的单元测试中,我这样模拟调用:
var diagDeferred = _$q_.defer();
diagDeferred.resolve({
'name': 'Breast',
'categories': null,
'id': '026c7cd0-14ef-4312-a8f1-2092107b0e50',
'icd9codes': [{id: '1', code: '001', description: 'ICD9 Code'}]
});
spyOn(Diagnosis, 'findAll').and.returnValue(diagDeferred.promise);
而实际的调用是模拟的,没有执行的是 [=17] 的 .then
中的函数(我找不到关于如何完成此操作的任何可靠信息) =]
我知道代码有效,但我需要用单元测试来覆盖它,我快干了。
谢谢。
我想你忘了在测试中调用 $scope.digest()
。这是一个工作 fiddle。
调用 startEditing()
后,您应该调用 $scope.$digest()
以便执行模拟 promise
并且您可以在 then
块中获取数据。希望对你有帮助。