【发布时间】:2015-10-06 10:35:55
【问题描述】:
在为 Angular 控制器进行 Jasmine 测试时,我发现这两种方法之间存在差异。不应该有,但是有。也就是说,使用调试,我发现在这两种情况下,正确的模拟项目都会通过,但是测试的行为不同。
首先:这里我们模拟服务项,然后在创建时使用 DI 将其注入控制器。
$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
});
【问题讨论】:
-
定义它们的行为方式不同
-
@Phil 我一直在重构应用程序,使用第一种方法使测试失败,但第二种方法使测试通过。然而,两者在理论上都在做同样的事情。
-
您需要提供更多信息,例如“第一种方法的测试是如何失败的”。您还应该提供实际代码,因为上面的第一个代码部分是不可能的;
$provide仅在模块 config 期间可用,而$controller仅在inject回调中可用