AngularJS单元测试问题:注入$location
我在测试routeProvider时遇到问题。那里似乎有很多信息,但我所做的每件事,我都无法让单元测试消化位置。我希望能在这里找到一些解决办法。我正在摸索通过angularJS和单元测试的方法,可以使用任何建议 以下是routeProvider函数:AngularJS单元测试问题:注入$location,angularjs,unit-testing,testing,location,Angularjs,Unit Testing,Testing,Location,我在测试routeProvider时遇到问题。那里似乎有很多信息,但我所做的每件事,我都无法让单元测试消化位置。我希望能在这里找到一些解决办法。我正在摸索通过angularJS和单元测试的方法,可以使用任何建议 以下是routeProvider函数: use strict'; var myApp = angular.module('myApp', [ 'ngRoute', 'myServices', 'myControllers' ]); myApp.config(['$rout
use strict';
var myApp = angular.module('myApp', [
'ngRoute',
'myServices',
'myControllers'
]);
myApp.config(['$routeProvider',
function($routeProvider) {
$routeProvider.
when('fooBar', {
templateUrl: 'barFoo',
controller: 'SummaryCtrl'
}).
otherwise({
redirectTo: 'defaultFooBar'
});
}]);
我试图用以下内容测试这个routeProvider,但在我的一生中,我无法将我所做的更改注入到位置
'use strict';
describe('myApp',function() {
var $scope;
var location;
beforeEach(inject(function($rootScope, $location) {
$scope = $rootScope;
location = $location;
}));
it('redirect to default', function() {
location.path('efipoejs');
$scope.$apply();
expect(location.path()).toBe('defaultFooBar');
})
});
我试过$scope.$digest和$apply。。。。无论我做什么,我总是得到这样的结果:
Expected '/efipoejs' to be 'defaultFooBar'.
我真的很想让angularJS工作。。。如果你有什么建议可以引导我走上正确的道路…我将非常感激
回答:因为我不能在8小时内发布答案
哟,是的
我是这样做的
describe('Testing routes', function() {
beforeEach(module('myApp'));
var location, route, rootScope;
beforeEach(inject(
function( $location, $route, $rootScope ) {
location = $location;
route = $route;
rootScope = $rootScope;
}));
describe('Default Routing', function() {
beforeEach(inject(
function($httpBackend) {
$httpBackend.expectGET('DefaultUrl').respond(200);
}));
it('should load the default page on fake path', function() {
location.path('/ermagerd');
rootScope.$digest();
expect(location.path()).toBe('defaultFooBar');
});
});
});
});
再一次,这是我的逻辑
'use strict';
var myApp = angular.module('myApp', [
'ngRoute',
'myServices',
'myControllers'
]);
myApp.config(['$routeProvider',
function($routeProvider) {
$routeProvider.
when('fooBarDefault', {
templateUrl: 'defaultUrl',
controller: 'DefaultCtrl'
}).
otherwise({
redirectTo: 'fooBarDefault'
});
}]);
在运行测试之前是否加载了模块?在每个模块“myApp”之前?在每个模块“myApp”之前;我在另一行之前加了那一行。。。似乎有同样的效果,没有得到我期望得到的输出。这可能需要一个集成测试。不确定…@AlexC你能详细说明一下吗?e2e。。我还没有对e2e做过太多的研究,但如果这是我需要走的路线,我会很乐意走这条路。您可能能够进行单元测试,但我认为e2e将更好地解决这部分代码。我也不是专家,所以我不想告诉你怎么做。希望你能很快得到一个更完整的答案。