【发布时间】:2016-11-17 18:32:50
【问题描述】:
我正在使用 Jasmine 测试 Angular 1 应用程序。我的问题是,是否可以在同一个 beforeEach 语句中为两个独立的服务创建两个间谍?
现在我可以让第一个间谍工作,但我不确定为什么另一个间谍不能工作。我将间谍设置为将承诺分配给它们内部的全局变量,可以在任何测试中访问该变量。所以,第二个变量只是返回 undefined 而不是预期的承诺。
这是beforeEach中的示例设置代码:
mockWorkingService = jasmine.createSpyObj('mockWorkingService', ['retrieve']);
mockWorkingService.retrieve.and.callFake(function(crit) {
workingServiceDfr = $q.defer(); // $q is defined globally
return workingService.promise;
});
mockFailingService = jasmine.createSpyObj('mockFailingService', ['retrieve']);
mockFailingService.retrieve.and.callFake(function(crit) {
failingServiceDfr = $q.defer();
return failingService.promise;
});
另外,retrieve 是为每个服务单独定义的。
【问题讨论】:
-
您当然可以拥有任意数量的间谍。您需要提供更多关于如何设置测试的背景信息,以便我们能够提供帮助。
-
还需要什么其他上下文?我知道问题出现在 beforeEach 中,并且没有太多其他问题。在
describe块内的 beforeEach 之外定义了一堆全局变量,以及定义模块的位置。 -
一个例子是,你如何在你的测试中调用这些服务?您在哪一行代码中看到“第二个变量只是返回
undefined”?如果您想了解我们希望看到的信息类型,请参阅 minimal reproducible example。 -
谢谢,我会检查一下,然后更新问题。我只是在上面示例代码的最后一行之后记录
failingServiceDfr的值,它返回未定义(以及它在我的测试中使用的位置)。而另一个延期是返回一个值。感觉就像我在代码中遗漏了一些非常明显的东西。因此,在投入大量时间使我的问题“精英”之前,我将花更多时间进行调试。谢谢! -
尝试在 afterEach(function(){// new mockWorkingService; new mockFailingService; }) 中的测试之后重置 mockWorkingService 和 mockFailingService ,以便每次测试运行都能获得干净的服务及其协作者
标签: javascript angularjs unit-testing jasmine promise