现在我有错误“;ReferenceError:项未定义“;不知道如何测试我的dataService

Now I have error "ReferenceError: items is not defined" and cannot ideas how I can test my dataService.

本文关键字:何测试 测试 dataService 我的 未定义 有错误 ReferenceError 不知道      更新时间:2023-09-26

我需要帮助,关于为我的工厂添加茉莉花味道。我的代码是…

---dataService.js-

angular.module('angularAppApp')
   .factory('dataService', function($resource){
      return $resource(`http://...:3100/posts/:id`, null,
         {
           'update': { method:'PUT' }
      });
})

---onePostCtrl.js---

angular.module('angularAppApp')
   .controller('onePostCtrl', ['$scope', '$http', '$routeParams', 'dataService',
     function ($scope, $http, $routeParams, dataService) {
         dataService.get ({id: $routeParams.postId}).$promise.then(function(data){
             $scope.postInfo = data;
         });
       }]);

--主容器

angular.module('angularAppApp').controller('postCtrl', ['$scope','$http', 'ngDialog', 'dataService','trimService', function ($scope, $http, ngDialog, dataService, trimService) {
//save data to remote server from loaded pop-up
$scope.savePost = function(){
 $scope.addFormData.date = $scope.formated_date;
      dataService.save($scope.addFormData, function() {
            laodData();
      });
      ngDialog.closeAll();
};
//delete post from remote server
$scope.deletePost = function(article) {
      dataService.delete({ id:  article._id }, function() {
            laodData();
  });
};
//edit post from remote server
$scope.updatePost = function (article) {
     dataService.update({ id:  article._id},article).$promise.then(function() {
            laodData();
      });
      ngDialog.closeAll();
}

}]);

---模拟数据-

angular.module('mock', []).value('items', [{ ... }]

---在index.html我已经加载了模拟脚本---

 src="bower_components/angular-mocks/angular-mocks.js"
 src="mosk_data/mocks.module.js"

--茉莉测试是。。。

describe("factory of dataService", function (){  
 var $httpBackend, $http, $q, factory;
  beforeEach(module("angularAppApp"));
  beforeEach(module('mock'));
    beforeEach(function(){
     inject(function($injector, _$httpBackend_,_$http_,_$q_){
       $q = _$q_;
       $http = _$http_;
       $httpBackend = _$httpBackend_;
       $httpBackend.when('GET', '/items').respond(items);
       factory = $injector.get('dataService');
    });
afterEach(function () {
     $httpBackend.verifyNoOutstandingExpectation();
     $httpBackend.verifyNoOutstandingRequest();
 });
it("Data service", function(){
});

});

现在,我有一个错误"ReferenceError:items is not defined",并且不知道如何测试我的dataService。

您忘记注入值并将其分配给测试中的变量。试试这个:

var $httpBackend, $http, $q, factory, items; //declare variable items here (or you can do it inside beforeEach)
  beforeEach(module("angularAppApp"));
  beforeEach(module('mock'));
    beforeEach(function(){
     inject(function($injector, _$httpBackend_,_$http_,_$q_, _items_){
       $q = _$q_;
       $http = _$http_;
       //inject the value and assign to your variable
       items = _items_
       $httpBackend = _$httpBackend_;
       $httpBackend.when('GET', '/items').respond(items);
       factory = $injector.get('dataService');
    });

您得到的Reference error是因为没有名为items变量。您定义了一个名为items角度值,但它与变量不同——将其视为"位于角度内脏内的某个地方",要使用它,必须注入它,然后用作正常变量。