来自 node_modules 的 Angular 单元测试 spyOn 类
Posted
技术标签:
【中文标题】来自 node_modules 的 Angular 单元测试 spyOn 类【英文标题】:Angular unit test spyOn class from node_modules 【发布时间】:2020-12-16 15:53:47 【问题描述】:我正在尝试创建一个间谍以确保从 node_modules 类调用函数 例如在 obs.d.ts 中:
export declare module Obs
class MyService
func(params: Object): Promise<void>;
所以我想监视 func()
在我目前正在尝试的测试中:
import Obs from 'obs';
describe('CurrentService', () =>
let test: Obs.MyService;
let spy;
beforeEach(() =>
//test.func(); //this works
spy = spyOn(test, 'func'); // spy does not
TestBed.configureTestingModule();
service = TestBed.get(CurrentService);
expect(spy).toHaveBeenCalled();
func 方法应该在 CurrentService 的构造函数中调用。
得到错误:“错误::找不到用于 func() 的对象”
问题在于无法识别 spy 中的 func 方法,即使 test.func() 有效(请参阅代码的注释部分)。
不确定这是否是导入问题。我相信,如果您实际创建了类(即 test = new Obs.MyService() ,那么间谍将起作用,但这将是无用的,因为 CurrentService 中没有触及新的类实例。
感谢您的帮助。
【问题讨论】:
你不会在 CurrentService 中注入 obs 吗?你不能只是嘲笑它然后监视它..而不是试图调用真实的东西。 没有从节点模块导入Obs 在构造函数中调用的函数中调用它 只需要确保它被调用,无法访问服务中的函数,因为在构建之前无法设置间谍,并且该函数启动整个应用程序,因此不能轻易创建新服务 【参考方案1】:试试这个,虽然这也可能不起作用:
import * as ObsContainer from 'obs';
describe('CurrentService', () =>
let spy;
beforeEach(() =>
//test.func(); //this works
spy = spyOn(ObsContainer.MyService, 'func');
TestBed.configureTestingModule();
service = TestBed.get(CurrentService);
expect(spy).toHaveBeenCalled();
【讨论】:
谢谢,我已经尝试过了,在这里不工作,不知道为什么以上是关于来自 node_modules 的 Angular 单元测试 spyOn 类的主要内容,如果未能解决你的问题,请参考以下文章
模块构建失败(来自 ./node_modules/sass-loader/dist/cjs.js)
Angular 6 - '"/node_modules/firebase/index"' 没有导出的成员 'functions'
angular-cli.json中node_modules路径的智能感知?
angular中安装@angular/cdk时遇到的错误——node_modules/@angular/cdk/table/table.d.ts:277:9 - error TS1086: An ac