【发布时间】:2018-10-01 06:35:38
【问题描述】:
我对角度和玩笑都很陌生。我有这样的课:
import {CloudWatchLogs} from 'aws-sdk/clients/browser_default';
import {isNullOrUndefined} from 'util';
@Injectable()
export class MyService {
private cloudWatchLogs: CloudWatchLogs = null;
constructor() {}
startService() {
setupService();
myOtherTask();
}
private setUpService() {
if (!isNullOrUndefined(this.cloudWatchLogs)) {
this.cloudWatchLogs = new CloudWatchLogs();
// setup options
}
}
private void myOtherTask() {
this.cloudWatchLogs.doSomething();
this.cloudWatchLogs.doSomethingElse();
}
}
我正在尝试使用 Jest 对 MyService 运行单元测试。我想知道的是,是否可以按照此类的编写方式模拟 doSomething 和 doSomethingElse 的 CloudWatchLogs 方法,请记住 CloudWatchLogs 是一个 javascript 对象,而不是 Angular 可注入对象。
我认为能够模拟 CloudWatchLogs 的唯一解决方案是创建一个可注入的服务来包装 CloudWatchLogs,然后将其注入 MyService。
【问题讨论】:
-
您当前的代码在服务中将 cloudWatchLogs 作为私有。外部测试将无法查看内容以测试正在发生的事情。考虑修改代码以进行测试或依赖注入,以便能够查看 cloudWatchLogs 的内容。当您导入 CloudWatchLogs 时,可以将其替换为 Jest 模拟以设置测试内容,但私有变量引用将阻止外部测试能够检查该变量。
-
谢谢,有道理。您能告诉我如何用 Jest 模拟替换并设置内容吗?