Тест узла TypeScript не может быть изменен свойство?Javascript

Форум по Javascript
Ответить
Anonymous
 Тест узла TypeScript не может быть изменен свойство?

Сообщение Anonymous »

Итак, у меня есть этот тест в моем проекте TypeScript, и когда я выполняю мак -тест, два теста не провалили, что все проблемы связаны с TypeError [Error]: невозможно переопределить свойство: FetchAndnormalizePullRequests Я все время смотрел и не смог найти способ решить проблему. Это < /p>

pull-request.handler.test.ts
< /blockquote>
import { test, describe, beforeEach, afterEach, mock } from 'node:test';
import assert from 'node:assert';
import type { Request, Response } from 'express';
import { getAllPullRequests } from '../../handlers/pull-requests.handler.js';

const originalEnv = process.env;
// const pullRequestsService = await import('../../services/pull-requests.service.js');

describe('Pull Requests Handler', () => {
let mockReq: Partial;
let mockRes: Partial;
let statusMock: any;
let jsonMock: any;
let fetchMock: any;

beforeEach(() => {
mock.restoreAll();

statusMock = mock.fn(() => mockRes);
jsonMock = mock.fn();

mockRes = {
status: statusMock,
json: jsonMock
};

process.env = { ...originalEnv };
});

afterEach(() => {
process.env = originalEnv;
mock.restoreAll();
});

test('should return 500 when GITHUB_API_TOKEN is missing', async () => {
delete process.env.GITHUB_API_TOKEN;
mockReq = {
query: { owner: 'testowner', repo: 'testrepo' }
};

await getAllPullRequests(mockReq as Request, mockRes as Response);

assert.strictEqual(statusMock.mock.callCount(), 1);
assert.deepStrictEqual(statusMock.mock.calls[0].arguments, [500]);
assert.strictEqual(jsonMock.mock.callCount(), 1);
assert.deepStrictEqual(jsonMock.mock.calls[0].arguments, [{ error: 'Missing environment variables.' }]);
});

test('should return 500 when owner is missing', async () => {
process.env.GITHUB_API_TOKEN = 'test-token';
mockReq = {
query: { repo: 'testrepo' }
};

try{
await getAllPullRequests(mockReq as Request, mockRes as Response);
}
catch(e){
console.error(e);
}

assert.strictEqual(statusMock.mock.callCount(), 1);
assert.deepStrictEqual(statusMock.mock.calls[0].arguments, [500]);
assert.strictEqual(jsonMock.mock.callCount(), 1);
assert.deepStrictEqual(jsonMock.mock.calls[0].arguments, [{ error: 'Missing environment variables.' }]);
});

test('should return 500 when repo is missing', async () => {
process.env.GITHUB_API_TOKEN = 'test-token';
mockReq = {
query: { owner: 'testowner' }
};

await getAllPullRequests(mockReq as Request, mockRes as Response);

assert.strictEqual(statusMock.mock.callCount(), 1);
assert.deepStrictEqual(statusMock.mock.calls[0].arguments, [500]);
assert.strictEqual(jsonMock.mock.callCount(), 1);
assert.deepStrictEqual(jsonMock.mock.calls[0].arguments, [{ error: 'Missing environment variables.' }]);
});

test('should return 200 with pull requests when all parameters are valid', async () => {
process.env.GITHUB_API_TOKEN = 'test-token';
mockReq = {
query: { owner: 'testowner', repo: 'testrepo' }
};

const mockPullRequests = [
{
prNumber: 1,
title: 'Test PR',
creator: 'testuser',
creationTimestamp: '2024-01-01T00:00:00Z',
requestedReviewers: ['reviewer1'],
lastActionType: 'open',
lastActionTimestamp: '2024-01-01T00:00:00Z'
}
];

const fetchMock = mock.fn(() => Promise.resolve(mockPullRequests));
mock.method(await import('../../services/pull-requests.service.js'), 'fetchAndNormalizePullRequests', fetchMock);

await getAllPullRequests(mockReq as Request, mockRes as Response);

assert.strictEqual(statusMock.mock.callCount(), 1);
assert.deepStrictEqual(statusMock.mock.calls[0].arguments, [200]);
assert.strictEqual(jsonMock.mock.callCount(), 1);
assert.deepStrictEqual(jsonMock.mock.calls[0].arguments, [mockPullRequests]);
});

test('should return 500 when service throws an error', async () => {
process.env.GITHUB_API_TOKEN = 'test-token';
mockReq = {
query: { owner: 'testowner', repo: 'testrepo' }
};

const fetchMock = mock.fn(() => Promise.reject(new Error('Service error')));
mock.method(await import('../../services/pull-requests.service.js'), 'fetchAndNormalizePullRequests', fetchMock);

await getAllPullRequests(mockReq as Request, mockRes as Response);

assert.strictEqual(statusMock.mock.callCount(), 1);
assert.deepStrictEqual(statusMock.mock.calls[0].arguments, [500]);
assert.strictEqual(jsonMock.mock.callCount(), 1);
assert.deepStrictEqual(jsonMock.mock.calls[0].arguments, [{ error: 'Internal server error.' }]);
});
});
< /code>
И это моя функция fetchandnormalizepullRequest < /p>
import axios from 'axios';
import type{ NormalizedPR } from '../types/types.js';

export const fetchAndNormalizePullRequests = async (owner: string, repo: string, token: string): Promise => {
const url = `https://api.github.com/repos/${owner}/$ ... ?state=all`;

try {
const response = await axios.get(url, {
headers: {
Authorization: `token ${token}`,
'Content-Type': 'application/json',
},
});

return response.data.map((pr: any) => ({
prNumber: pr.number,
title: pr.title,
creator: pr.user.login,
creationTimestamp: pr.created_at,
requestedReviewers: pr.requested_reviewers.map((reviewer: any) => reviewer.login),
lastActionType: pr.merged_at ? 'merged' : pr.state,
lastActionTimestamp: pr.updated_at,
}));
} catch (error) {
throw new Error('Failed to fetch pull requests from GitHub API.');
}
};
< /code>
Что я делаю не так? не могу решить проблему

Подробнее здесь: https://stackoverflow.com/questions/797 ... e-property
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»