Javascript 现在我有一个错误;ReferenceError:未定义项";我不知道如何测试我的数据服务。

Javascript 现在我有一个错误;ReferenceError:未定义项";我不知道如何测试我的数据服务。,javascript,angularjs,mocking,jasmine,karma-jasmine,Javascript,Angularjs,Mocking,Jasmine,Karma Jasmine,我需要帮助,为我的工厂添加茉莉花香。 我的代码是 ---dataService.js--- ---OnePosttrl.js--- --主容器--- }])) ---模拟数据--- ---在index.html,我已经加载了mock脚本--- --茉莉花测试是 describe("factory of dataService", function (){ var $httpBackend, $http, $q, factory; beforeEach(module("angularAp

我需要帮助,为我的工厂添加茉莉花香。 我的代码是

---dataService.js---

---OnePosttrl.js---

--主容器---

}]))

---模拟数据---

---在index.html,我已经加载了mock脚本---

--茉莉花测试是

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未定义”,我不知道如何测试我的数据服务

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

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');
    });

您得到的
引用错误
是因为没有名为
项的变量
。您使用名称
items
定义了一个角度值,但它与变量不同-将其视为“角度内脏中的某个地方”,要使用它,您必须将其注入,然后将其用作普通变量。

看到这一点,我相信问题的原因是相同的:非常感谢!!现在我没有引用错误,调用了模拟数据。还有一个问题,我无法搜索如何使用模拟数据而不是$resource(
http://...:3100/posts/:id
,null…)如果要测试
$resource
,只需使用
$httpBackend
并键入希望它调用的完整URL。是,我有到服务器$httpBackend.expectGET(','server data')的测试连接;但是我不知道如何使用模拟数据测试我的factory dataService和postCtrl控制器方法savePost、deletePost、updatePost。您拥有
respond
函数,您定义了响应的样子-使用模拟数据作为此函数的参数。一切都被描述了
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', [{ ... }]
 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(){
});
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');
    });