【问题标题】:Angular unit test spyOn class from node_modules来自 node_modules 的 Angular 单元测试 spyOn 类
【发布时间】: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
  • 在构造函数中调用的函数中调用它
  • 只需要确保它被调用,无法访问服务中的函数,因为在构建之前无法设置间谍,并且该函数启动整个应用程序,因此不能轻易创建新服务

标签: node.js angular jasmine karma-jasmine


【解决方案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();

【讨论】:

  • 谢谢,我已经尝试过了,在这里不工作,不知道为什么
猜你喜欢
  • 2021-03-09
  • 2018-01-12
  • 1970-01-01
  • 1970-01-01
  • 2019-07-11
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 2017-09-15
相关资源
最近更新 更多