【问题标题】:Can you have multiple spyObjs in a beforeEach你可以在 beforeEach 中有多个 spyObjs
【发布时间】: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


【解决方案1】:

简短的回答是“是”,beforeEach 语句中可以有多个间谍。

【讨论】:

  • 每个 it() 语句是否仅限于一个间谍?或者你可以在一个测试中拥有多个间谍?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-16
  • 2014-11-11
  • 1970-01-01
  • 2016-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多