Javascript 现在我有一个错误;ReferenceError:未定义项";我不知道如何测试我的数据服务。
我需要帮助,为我的工厂添加茉莉花香。 我的代码是 ---dataService.js--- ---OnePosttrl.js--- --主容器--- }])) ---模拟数据--- ---在index.html,我已经加载了mock脚本--- --茉莉花测试是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
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');
});