我在开玩笑地 mock 静态方法有麻烦。假设您有一个带有静态方法的A类:

export default class A {
  f() {
    return 'a.f()'
  }

  static staticF () {
    return 'A.staticF()'
  }
}

而进口B的B类
import A from './a'

export default class B {
  g() {
    const a = new A()
    return a.f()
  }

  gCallsStaticF() {
    return A.staticF()
  }
}

现在您要模拟A。模拟f()很容易:
import A from '../src/a'
import B from '../src/b'

jest.mock('../src/a', () => {
  return jest.fn().mockImplementation(() => {
    return { f: () => { return 'mockedA.f()'} }
  })
})

describe('Wallet', () => {
  it('should work', () => {
    const b = new B()
    const result = b.g()
    console.log(result) // prints 'mockedA.f()'
  })
})

但是,我找不到有关如何模拟A.staticF的任何文档。这可能吗?

最佳答案

您可以将模拟对象分配给静态方法

import A from '../src/a'
import B from '../src/b'

jest.mock('../src/a')

describe('Wallet', () => {
    it('should work', () => {
        const mockStaticF = jest.fn().mockReturnValue('worked')

        A.staticF = mockStaticF

        const b = new B()

        const result = b.gCallsStaticF()
        expect(result).toEqual('worked')
    })
})

关于javascript - mock 静态方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50421732/

10-10 22:30