开玩笑-如何使用模拟类实例

时间:2019-05-23 06:53:24

标签: javascript typescript testing jestjs auth0

在我的前端React应用程序中,我正在使用auth0-js库进行身份验证。导出WebAuth类。在代码中,我通过调用WebAuth创建了一个实例 像这样:

import { WebAuth } from 'auth0-js'


const auth0Client = new WebAuth({ /* some options */ })

/* 
...
using auth0Client
...
*/

我已经在__mocks__文件夹中创建了一个与库名类似的文件。因此,Jest自动模拟了该库。

// __mocks__/auth0-js.ts
const auth0Mock = jest.genMockFromModule('auth0-js')

module.exports = auth0Mock

但是,在测试中,我想检查auth0Client上是否调用了某些方法。我该怎么办?

1 个答案:

答案 0 :(得分:1)

这是一个简单的示例,可以帮助您入门:

__ mocks __ / auth0-js.ts

module.exports = jest.genMockFromModule('auth0-js')

code.ts

import { WebAuth } from 'auth0-js'

const auth0Client = new WebAuth({ domain: 'your domain', clientID: 'your client id'});
auth0Client.authorize({ audience: 'your audience' });

code.test.ts

import { WebAuth } from 'auth0-js';
import './code';  // <= run code.ts

test('code', () => {
  expect(WebAuth).toHaveBeenCalledWith({ domain: 'your domain', clientID: 'your client id' });  // Success!
  const auth0Client = (WebAuth as jest.Mock).mock.instances[0];  // <= get the WebAuth instance
  expect(auth0Client.authorize).toHaveBeenCalledWith({ audience: 'your audience' });  // Success!
})

WebAuth是一个模拟函数,因此当用于创建新实例时,它将记录其创建的实例。

在测试期间,您可以检索WebAuth并使用它来检索创建的实例。

拥有实例后,您可以检查其功能(也包括模拟功能)以查看是否按预期方式调用了它们。