如何模拟typescript类的多个函数?

时间:2018-02-11 14:56:26

标签: function unit-testing typescript mocking jestjs

假设我有一个打字稿类

a.ts

export class A {
    constructor() {
         this.__functionA()
    }

    private __functionA(){
        this.__functionB()
    }

    private __functionB(){
    }

}

现在,我的 Class

有一些测试
import { A } from "./a"

describe("Class A",() => {

    it(`__functionB should Have been called`,() => {

        A.proptotype.__functionB = jest.fn()
        A.proptotype.__functionA = jest.fn()

        let instance = new A()

        expect (instance.__functionB).toHaveBeenCalled()
        expect (instance.__functionA).toHaveBeenCalled()

    })
})

测试失败并出现错误

expect(jest.fn()).toHaveBeenCalled()

现在,当我只模拟 __functionA的{​​{1}}并仅针对函数运行我的断言时,即{{1}我的测试通过。为什么这样?

如何模拟的多个函数

如果我在这里做错了,请纠正我。

N.B。: - 我正在使用 jest 来运行我的测试

1 个答案:

答案 0 :(得分:0)

找到答案,

我只需要替换

class Class2ReadOnly {
   private Class2 _master;

   public Class2ReadOnly(Class2 master) {
      _master = master;
   }

   public string Property {
      get { return _master.Property; }
   }
}

class Class1 {
   List<Class2ReadOnly> classes = new List<Class2ReadOnly>();

   public IEnumerable<Class2ReadOnly> Classes {
      get { return classes.AsEnumerable(); }
   }

   public void AddClass(Class2 cls) {
      classes.Add(new Class2ReadOnly(cls));
   }
}

A.proptotype.__functionB = jest.fn()
A.proptotype.__functionA = jest.fn()

一切正常。

希望,这有助于某人。