[英]How to mock AWS Cognito CognitoIdentityServiceProvider with Jest?
我正在嘗試編寫單元測試,我需要模擬來自認知服務的方法響應 - CognitoIdentityServiceProvider
我有以下工作代碼調用adminInitiateAuth
操作
import * from AWS from 'aws-sdk'
const cognito = new AWS.CognitoIdentityServiceProvider();
const response = await cognito.adminInitiateAuth(expectedParams).promise();
// main functionality I want to test
我想要一個規范,我嘗試將此服務模擬為先決條件
const mockResponse = {
AuthenticationResult: {
AccessToken: 'expected-token'
}
}
jest.mock('aws-sdk', () => {
return {
CognitoIdentityServiceProvider: {
adminInitiateAuth: () => {
return mockResponse;
}
}
}
});
這給我一個錯誤
AWS.CognitoIdentityServiceProvider is not a constructor
這怎么不能是構造函數呢? 你有什么想法如何嘲笑它嗎?
我想到了。 它可能對某人有用
jest.mock('aws-sdk', () => {
return {
CognitoIdentityServiceProvider: class {
adminInitiateAuth() {
return this;
}
promise() {
return Promise.resolve(mockResponse);
}
}
}
});
如果我們想使用spyOn
模擬特定的 function,這是另一種方法:
const cognotoIdentityServiceProvider = Object.getPrototypeOf(new AWS.CognitoIdentityServiceProvider());
const stub = jest.spyOn(cognotoIdentityServiceProvider, 'adminDeleteUser').mockReturnValue({
promise: () => Promise.resolve('bob johnson'),
});
希望這會有所幫助
jest.mock("aws-sdk", () => {
const cognito = { listUsers: jest.fn() };
return {
CognitoIdentityServiceProvider: jest.fn(() => cognito),
config: {
update: jest.fn(),
},
};
});
const mCognitoIdentityServiceProvider =
new AWS.CognitoIdentityServiceProvider();
mCognitoIdentityServiceProvider.listUsers.mockImplementationOnce(() => {
return {
promise() {
return Promise.resolve('your mock data');
},
};
});
jest.mock('@aws-sdk/client-cognito-identity-provider', () => {
return {
CognitoIdentityProviderClient: class {
send() {
return mockCognitoResponseAddGroup
}
promise() {
return Promise.resolve({})
}
},
CreateGroupCommand: class {},
}
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.