Angularjs 为什么在测试控制器时,这些方法之间存在差异
在对角度控制器进行Jasmine测试时,我发现这两种方法之间存在差异。不应该有,但是有。也就是说,使用debug,我发现在这两种情况下正确的模拟项都会通过,但是测试的行为不同 首先:这里我们模拟服务项,然后在创建时使用DI将其注入控制器Angularjs 为什么在测试控制器时,这些方法之间存在差异,angularjs,testing,jasmine,Angularjs,Testing,Jasmine,在对角度控制器进行Jasmine测试时,我发现这两种方法之间存在差异。不应该有,但是有。也就是说,使用debug,我发现在这两种情况下正确的模拟项都会通过,但是测试的行为不同 首先:这里我们模拟服务项,然后在创建时使用DI将其注入控制器 $provide.value('core.data.CompanyService', companyService); $provide.value('core.list.ListGenerator', listGeneratorFactory); $provi
$provide.value('core.data.CompanyService', companyService);
$provide.value('core.list.ListGenerator', listGeneratorFactory);
$provide.value('core.actions.ActionContext', actionContext);
ActivitiesCtrl = $controller('activities.ActivitiesCtrl', {
$scope: scope
});
第二:
在这里,我们在控制器创建中明确指定注入的服务项:
ActivitiesCtrl = $controller('activities.ActivitiesCtrl', {
$scope: scope,
'core.lists.ListGenerator': listGeneratorFactory,
'core.actions.ActionContext': actionContext,
'core.data.CompanyService': companyService
});
如果您的第一段代码实际上就是您所拥有的,那么我认为我看到了问题所在;应在模块配置部分中设置提供程序,并且应在
inject
回调中访问$controller
鉴于在此之前模拟的正确设置,以下内容是等效的
$injector
beforeEach(function() {
module('your.controller.module', function($provide) {
$provide.value('core.list.ListGenerator', listGeneratorFactory);
$provide.value('core.actions.ActionContext', actionContext);
$provide.value('core.data.CompanyService', companyService);
});
inject(function($controller) {
// assuming scope is defined somewhere
ActivitiesCtrl = $controller('activities.ActivitiesCtrl', {
$scope: scope
});
});
});
beforeEach(inject($controller) {
// again, assuming scope is defined somewhere
ActivitiesCtrl = $controller('activities.ActivitiesCtrl', {
$scope: scope,
'core.lists.ListGenerator': listGeneratorFactory,
'core.actions.ActionContext': actionContext,
'core.data.CompanyService': companyService
});
}));
定义它们的行为方式重复,但没有答案:1)2)@Phil我一直在重组应用程序,使用第一种方法使测试失败,但第二种方法使测试通过。然而,理论上两者都在做同样的事情。你需要提供更多的信息,比如“第一种方法的测试是如何失败的”。您还应该提供实际的代码,因为上面的第一个代码部分是不可能的
$provide
仅在模块配置期间可用,而$controller
仅在注入
回调期间可用