Javascript 我正在使用sinon.stub方法将我的服务包装在typescript中,它需要一个数组,但是我的模拟数据是一个对象,我如何解决这个问题
这是我正在做的服务Javascript 我正在使用sinon.stub方法将我的服务包装在typescript中,它需要一个数组,但是我的模拟数据是一个对象,我如何解决这个问题,javascript,typescript,sinon,Javascript,Typescript,Sinon,这是我正在做的服务 class TransactionService { async getTransactions( req: RequestContract, query: TransactionQuery ): Promise<Transaction[]> { const token = await Auth.headless({ nuban: query.nuban }); const iris = new Iris({ req, t
class TransactionService {
async getTransactions(
req: RequestContract,
query: TransactionQuery
): Promise<Transaction[]> {
const token = await Auth.headless({ nuban: query.nuban });
const iris = new Iris({ req, token, headless: true, retries: 1 });
return iris.get<Transaction[]>(`${env.proxy_url}/transactions/`, {
params: query
});
}
filterTransaction(req: Request, transactions: Transaction[]): Transaction[] {
const accounts = req.session.accounts.map(account => account.acccount_number);
return transactions.filter(transaction => accounts.includes(transaction.nuban));
}
}
export const TransactionsService = new TransactionService();
最后是模拟数据
export function mockTransactions(account: string) {
return {
date: faker.date.recent(3),
transaction_type: 'credit',
amount: mockAmount(10000, 1000000, 4),
remark: faker.random.words(10),
reference: faker.random.words(5),
nuban: account,
};
}
这就是我得到的错误
TypeScript diagnostics (customize using `[jest-config].globals.ts-jest.diagnostics` option):
__tests__/mocks/services/transaction.ts:6:65 - error TS2345: Argument of type '{ date: Date; transaction_type: string; amount: number; remark: string; reference: string; nuban: string; }' is not assignable to parameter of type 'Transaction[]'.
Type '{ date: Date; transaction_type: string; amount: number; remark: string; reference: string; nuban: string; }' is missing the following properties from type 'Transaction[]': length, pop, push, concat, and 26 more.
6 sinon.stub(TransactionsService, 'getTransactions').resolves(mockTransactions('0071326981'))
因此,
getTransactions
需要事务[]即事务数组,而我用mockTransactions传递对象时,您的getTransactions方法似乎需要事务[],因此您应该能够修改模拟数据以返回包含事务对象的数组
export function mockTransactions(account: string): Transaction[] {
return [
{
date: faker.date.recent(3),
transaction_type: 'credit',
amount: mockAmount(10000, 1000000, 4),
remark: faker.random.words(10),
reference: faker.random.words(5),
nuban: account,
}
];
}
所以这个给我修好了 我创建了一个数组函数
export function array<T>(size: number, fake: () => T): T[] {
const values = [];
for (let i = 0; i < size; i++) values.push(fake());
return values;
}
然后在这里返回我的数组函数
export function mockTransactions(num: number): Transaction[] {
return array(num, mockTransaction);
}
export function mockTransaction(): Transaction {
return {
date: faker.date.recent(3),
transaction_type: 'credit',
amount: mockAmount(10000, 1000000, 4),
remark: faker.random.words(10),
reference: faker.random.words(5),
nuban: '0071326981',
};
}
export function mockTransactions(num: number): Transaction[] {
return array(num, mockTransaction);
}