如何在Sharepoint web部件中对CRUD方法进行单元测试?我尝试遵循Jest文档中关于创建类/特定方法的Mock,但我认为这是不可能的,因为我应该测试的服务类,需要一个特定的上下文作为构造函数。
export default class PnpServices implements IPnpServices {
private _sp;
constructor(context: WebPartContext) {
this._sp = getSP(context);
}
public async sp_createItem(listName: string, itemObject: any): Promise<any> {
try {
const iar: IItemAddResult = await this
._sp.web.lists.getByTitle(listName).items.add(itemObject)
return iar.data.Id;
} catch (e) {
throw new Error("error")
}
}
我试着设置一个简单的测试来检查构造函数是否可以在将“null”解析为参数而不是上下文时被调用
jest.mock('./pnpservices')
it('should pass', () => {
const mockedClassInstance = new PnpServices(null);
expect(PnpServices).toBeCalledTimes(1);
})
我能找到的大多数例子都没有创建真正有用的测试,甚至没有面向业务的方法,如CRUD,它们大多只是简单的“加法”方法,或者它们唯一的功能是返回console.log。
有什么帮助吗?
2条答案
按热度按时间8yparm6h1#
使用SPFx Web部件并不容易。首先,jest本身并不是开箱即用的,你有很多东西要安装和配置。我关注了这篇文章,它或多或少在几年前工作:
https://www.eliostruyf.com/sharepoint-framework-unit-tests-with-jest/
由于你似乎也在同一个项目中使用pnpjs,你可能想看看这个:
https://github.com/pnp/pnpjs/issues/1425
k4emjkb12#
我在博客上写了一段时间。你可以找到文章here。有一个完整设置的示例链接。
长话短说-- SPFx还不能在jest运行时运行,所以你必须使用jest.mock来模拟大多数的spfx库,以防止从node_modules加载它。