1
1
import { describe , test , expect , beforeAll } from '@jest/globals' ;
2
2
import RunClient from '../src/tracking/RunClient' ;
3
+ import ExperimentClient from '../src/tracking/ExperimentClient' ;
3
4
import { Run } from '../src/utils/interface' ;
4
5
import { ApiError } from '../src/utils/apiError' ;
5
6
6
7
describe ( 'RunClient' , ( ) => {
7
- let client : RunClient ;
8
+ let runClient : RunClient ;
9
+ let experimentClient : ExperimentClient ;
10
+ let experimentId : string ;
8
11
9
12
beforeAll ( async ( ) => {
10
13
// Add a small delay to ensure MLflow is fully ready
11
14
await new Promise ( ( resolve ) => setTimeout ( resolve , 2000 ) ) ;
12
- client = new RunClient ( 'http://127.0.0.1:5001' ) ;
15
+ runClient = new RunClient ( 'http://127.0.0.1:5001' ) ;
16
+ experimentClient = new ExperimentClient ( 'http://127.0.0.1:5001' ) ;
17
+
18
+ // Generate the experiment ID for test runs
19
+ const timestamp = Date . now ( ) ;
20
+ experimentId = await experimentClient . createExperiment (
21
+ `Testing ${ timestamp } `
22
+ ) ;
13
23
} ) ;
14
24
15
25
describe ( 'createRun' , ( ) => {
16
26
// POST - Create a new run within an experiment
17
27
test ( '- Should create a run with experiment_id' , async ( ) => {
18
- const experiment_id = '876374673578277025' ;
28
+ const response = ( await runClient . createRun ( experimentId ) ) as Run ;
19
29
20
- const response = ( await client . createRun ( experiment_id ) ) as Run ;
21
-
22
- expect ( response . info . experiment_id ) . toBe ( experiment_id ) ;
30
+ expect ( response . info . experiment_id ) . toBe ( experimentId ) ;
23
31
} ) ;
24
32
25
33
test ( '- Should create a run with optional run_name' , async ( ) => {
26
- const experiment_id = '876374673578277025' ;
27
34
const run_name = 'Test Run 1' ;
28
35
29
- const response = ( await client . createRun ( experiment_id , run_name ) ) as Run ;
36
+ const response = ( await runClient . createRun (
37
+ experimentId ,
38
+ run_name
39
+ ) ) as Run ;
30
40
31
41
expect ( response . info . run_name ) . toBe ( run_name ) ;
32
42
expect ( response . data . tags ) . toContainEqual ( {
@@ -36,14 +46,13 @@ describe('RunClient', () => {
36
46
} ) ;
37
47
38
48
test ( '- Should create a run with optional tags' , async ( ) => {
39
- const experiment_id = '876374673578277025' ;
40
49
const tags = [
41
50
{ key : 'test_key1' , value : 'test_value1' } ,
42
51
{ key : 'test_key2' , value : 'test_value2' } ,
43
52
] ;
44
53
45
- const response = ( await client . createRun (
46
- experiment_id ,
54
+ const response = ( await runClient . createRun (
55
+ experimentId ,
47
56
undefined ,
48
57
undefined ,
49
58
tags
@@ -56,32 +65,40 @@ describe('RunClient', () => {
56
65
} ) ;
57
66
58
67
test ( '- Should create a run with all parameters' , async ( ) => {
59
- const experiment_id = '876374673578277025' ;
60
68
const run_name = 'Test Run 2' ;
61
69
const start_time = Date . now ( ) ;
62
70
const tags = [ { key : 'test_key' , value : 'test_value' } ] ;
63
71
64
- const response = ( await client . createRun (
65
- experiment_id ,
72
+ const response = ( await runClient . createRun (
73
+ experimentId ,
66
74
run_name ,
67
75
start_time ,
68
76
tags
69
77
) ) as Run ;
70
78
71
- expect ( response . info . experiment_id ) . toBe ( experiment_id ) ;
79
+ expect ( response . info . experiment_id ) . toBe ( experimentId ) ;
72
80
expect ( response . info . run_name ) . toBe ( run_name ) ;
73
81
expect ( response . info . start_time ) . toBe ( start_time ) ;
74
82
expect ( response . data . tags ) . toContainEqual ( tags [ 0 ] ) ;
75
83
} ) ;
76
84
85
+ test ( '- Should throw errors if experiment_id is missing' , async ( ) => {
86
+ // @ts -expect-error: testing for missing arguments
87
+ await expect ( runClient . createRun ( ) ) . rejects . toThrow ( ApiError ) ;
88
+ // @ts -expect-error: testing for missing arguments
89
+ await expect ( runClient . createRun ( ) ) . rejects . toThrow (
90
+ / E r r o r c r e a t i n g r u n : /
91
+ ) ;
92
+ } ) ;
93
+
77
94
test ( '- Should handle API errors' , async ( ) => {
78
95
const invalid_id = 'invalid_id' ;
79
96
80
97
// the thrown error is specifically an instance of 'ApiError'
81
- await expect ( client . createRun ( invalid_id ) ) . rejects . toThrow ( ApiError ) ;
98
+ await expect ( runClient . createRun ( invalid_id ) ) . rejects . toThrow ( ApiError ) ;
82
99
83
100
// the thrown error message with invalid_id somewhere in the message
84
- await expect ( client . createRun ( invalid_id ) ) . rejects . toThrow (
101
+ await expect ( runClient . createRun ( invalid_id ) ) . rejects . toThrow (
85
102
/ E r r o r c r e a t i n g r u n : .+ i n v a l i d _ i d /
86
103
) ;
87
104
} ) ;
0 commit comments