説明なし
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

config-meta.service.spec.ts 5.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. import { TestBed } from '@angular/core/testing';
  2. import { provideHttpClient } from '@angular/common/http';
  3. import { provideHttpClientTesting, HttpTestingController } from '@angular/common/http/testing';
  4. import { ConfigMetaService } from './config-meta.service';
  5. import { ConfigService } from 'base-core';
  6. // Mock ConfigService
  7. class MockConfigService {
  8. apiBaseUrl = 'http://localhost:8080';
  9. useMockData = true; // 使用模拟数据以便测试
  10. }
  11. describe('ConfigMetaService', () => {
  12. let service: ConfigMetaService;
  13. let httpTestingController: HttpTestingController;
  14. let mockConfigService: MockConfigService;
  15. beforeEach(() => {
  16. mockConfigService = new MockConfigService();
  17. TestBed.configureTestingModule({
  18. providers: [
  19. provideHttpClient(),
  20. provideHttpClientTesting(),
  21. ConfigMetaService,
  22. { provide: ConfigService, useValue: mockConfigService }
  23. ]
  24. });
  25. service = TestBed.inject(ConfigMetaService);
  26. httpTestingController = TestBed.inject(HttpTestingController);
  27. });
  28. afterEach(() => {
  29. httpTestingController.verify();
  30. });
  31. it('should be created', () => {
  32. expect(service).toBeTruthy();
  33. });
  34. describe('getListUrl', () => {
  35. it('should return correct URL when useMockData is true', () => {
  36. mockConfigService.useMockData = true;
  37. expect(service.getListUrl()).toBe('http://localhost:8080/tabulator/config/meta/list');
  38. });
  39. it('should return correct URL when useMockData is false', () => {
  40. mockConfigService.useMockData = false;
  41. expect(service.getListUrl()).toBe('http://localhost:8080/tabulator/config/meta/list');
  42. });
  43. });
  44. describe('listConfigMeta', () => {
  45. it('should return mock data when useMockData is true', (done) => {
  46. mockConfigService.useMockData = true;
  47. service.listConfigMeta().subscribe({
  48. next: (data) => {
  49. expect(data).toBeTruthy();
  50. expect(Array.isArray(data)).toBeTrue();
  51. // 模拟数据应该包含一些记录
  52. expect(data.length).toBeGreaterThan(0);
  53. done();
  54. },
  55. error: done.fail
  56. });
  57. });
  58. it('should make HTTP request when useMockData is false', () => {
  59. mockConfigService.useMockData = false;
  60. const mockResponse = {
  61. success: true,
  62. data: [
  63. {
  64. id: '1',
  65. configName: 'test',
  66. fieldName: 'testField',
  67. fieldType: 'string',
  68. yamlName: 'testYaml',
  69. fieldDesc: 'test description',
  70. creator: 'admin',
  71. createdAt: '2024-01-01T00:00:00Z'
  72. }
  73. ]
  74. };
  75. service.listConfigMeta().subscribe(response => {
  76. expect(response).toEqual(mockResponse.data);
  77. });
  78. const req = httpTestingController.expectOne('http://localhost:8080/tabulator/config/meta/list');
  79. expect(req.request.method).toBe('POST');
  80. req.flush(mockResponse);
  81. });
  82. });
  83. describe('listForTabulator', () => {
  84. it('should convert Tabulator params and return expected format', (done) => {
  85. mockConfigService.useMockData = true;
  86. const tabulatorParams = {
  87. page: 1,
  88. size: 20,
  89. sort: [{ field: 'configName', dir: 'asc' }],
  90. filter: [{ field: 'fieldType', type: '=', value: 'string' }]
  91. };
  92. service.listForTabulator(tabulatorParams).subscribe({
  93. next: (response) => {
  94. expect(response).toBeTruthy();
  95. expect(response.last_page).toBeDefined();
  96. expect(response.data).toBeDefined();
  97. expect(Array.isArray(response.data)).toBeTrue();
  98. done();
  99. },
  100. error: done.fail
  101. });
  102. });
  103. it('should handle empty params', (done) => {
  104. mockConfigService.useMockData = true;
  105. const emptyParams = {};
  106. service.listForTabulator(emptyParams).subscribe({
  107. next: (response) => {
  108. expect(response).toBeTruthy();
  109. expect(response.last_page).toBeDefined();
  110. expect(response.data).toBeDefined();
  111. expect(Array.isArray(response.data)).toBeTrue();
  112. done();
  113. },
  114. error: done.fail
  115. });
  116. });
  117. });
  118. describe('initConfigMeta', () => {
  119. it('should return mock success when useMockData is true', (done) => {
  120. mockConfigService.useMockData = true;
  121. service.initConfigMeta().subscribe({
  122. next: (result) => {
  123. expect(result).toBeTruthy();
  124. expect(result.success).toBeTrue();
  125. expect(result.data).toBe('模拟初始化成功');
  126. done();
  127. },
  128. error: done.fail
  129. });
  130. });
  131. it('should make HTTP POST request when useMockData is false', () => {
  132. mockConfigService.useMockData = false;
  133. const mockResponse = { success: true, data: '初始化成功' };
  134. service.initConfigMeta().subscribe(response => {
  135. expect(response).toEqual(mockResponse);
  136. });
  137. const req = httpTestingController.expectOne('http://localhost:8080/init/config/meta');
  138. expect(req.request.method).toBe('POST');
  139. req.flush(mockResponse);
  140. });
  141. });
  142. });