1App::Yath::Tester(3) User Contributed Perl Documentation App::Yath::Tester(3)
2
3
4
6 App::Yath::Tester - Tools for testing yath
7
9 This package provides utilities for running yath from within tests to
10 verify its behavior. This is primarily used for integration testing of
11 yath and for third party components.
12
14 use App::Yath::Tester qw/yath/;
15
16 my $result = yath(
17 # Command and arguments
18 command => 'test',
19 args => ['-pMyPlugin', 'path/to/test', ...],
20
21 # Exit code we expect from yath
22 exit => 0,
23
24 # Subtest to verify results
25 test => sub {
26 my $result = shift;
27
28 # Redundant since we have the exit check above
29 is($result->{exit}, 0, "Verify exit");
30
31 is($result->{output}, $expected_output, "Got the expected output from yath");
32 },
33 );
34
36 There are 2 exports from this module.
37
38 $result = yath(...)
39 my $result = yath(
40 # Command and arguments
41 command => 'test',
42 args => ['-pMyPlugin', 'path/to/test', ...],
43
44 # Exit code we expect from yath
45 exit => 0,
46
47 # Subtest to verify results
48 test => sub {
49 my $result = shift;
50
51 # Redundant since we have the exit check above
52 is($result->{exit}, 0, "Verify exit");
53
54 is($result->{output}, $expected_output, "Got the expected output from yath");
55 },
56 );
57
58 ARGUMENTS
59
60 cmd => $command
61 command => $command
62 Either 'cmd' or 'command' can be used. This argument takes a string
63 that should be a command name.
64
65 cli => \@ARGS
66 args => \@ARGS
67 Either 'cli' or 'args' can be used. If none are provided an empty
68 arrayref is used. This argument takes an arrayref of arguments to
69 the yath command.
70
71 $ yath [PRE_COMMAND] [COMMAND] [ARGS]
72
73 pre => \@ARGS
74 pre_command => \@ARGS
75 Either 'pre' or 'pre_command' can be used. An empty arrayref is
76 used if none are provided. These are arguments provided to yath
77 BEFORE the command on the command line.
78
79 $ yath [PRE_COMMAND] [COMMAND] [ARGS]
80
81 env => \%ENV
82 Provide custom environment variable values to set before running
83 the yath command.
84
85 encoding => $encoding_name
86 If you expect your yath command's output to be in a specific
87 encoding you can specify it here to make sure the
88 "$result->{output}" text has been read properly.
89
90 test => sub { ... }
91 tests => sub { ... }
92 subtest => sub { ... }
93 These 3 arguments are all aliases for the same thing, only one
94 should be used. The codeblock will be called with $result as the
95 onyl argument. The codeblock will be run as a subtest. If you
96 specify the 'exit' argument that check will also happen in the same
97 subtest.
98
99 test => sub {
100 my $result = shift;
101
102 ... verify result ...
103 },
104
105 exit => $integer
106 Verify that the yath command exited with the specified exit code.
107 This check will be run in a subtest. If you specify a custom
108 subtest then this check will appear to come from that subtest.
109
110 debug => $integer
111 Output debug info in realtime, depending on the $integer value this
112 may include the output from the yath command being run.
113
114 0 - No debugging
115 1 - Output the command and other action being taken by the tool
116 2 - Echo yath output as it happens
117
118 inc => $bool
119 This defaults to true.
120
121 When true the tool will look for a directory next to your test file
122 with an identical name except that '.t' or '.t2' will be stripped
123 from it. If that directory exists it will be added as a dev-lib to
124 the yath command.
125
126 If your test file is 't/foo/bar.t' then your yath command will look
127 like this:
128
129 $ yath -D=t/foo/bar [PRE-COMMAND] [COMMAND] [ARGS]
130
131 capture => $bool
132 Defaults to true.
133
134 When true the yath output will be captured and put into
135 "$result->{output}".
136
137 log => $bool
138 Defaults to false.
139
140 When true yath will be instructed to produce a log, the log will be
141 accessible via "$result->{log}". "$result->{log}" will be an
142 instance of Test2::Harness::Util::File::JSONL.
143
144 no_app_path => $bool
145 Default to false.
146
147 Normally "-D=/path/to/lib" is added to the yath command where
148 '/path/to/lib' is the path the the lib dir App::Yath was loaded
149 from. This normally insures the correct version of yath libraries
150 is loaded.
151
152 When this argument is set to true the path is not added.
153
154 lib => [...]
155 This poorly named argument allows you to inject command line
156 argumentes between "perl" and "yath" in the command.
157
158 perl [LIB] path/to/yath [PRE-COMMAND] [COMMAND] [ARGS]
159
160 RESULT
161
162 The result hashref may containt he following fields depending on the
163 arguments passed into "yath()".
164
165 exit => $integer
166 Exit value returned from yath.
167
168 output => $string
169 The output produced by the yath command.
170
171 log => $jsonl_object
172 An instance of Test2::Harness::Util::File::JSONL opened from the
173 log file produced by the yath command.
174
175 Note: By default no logging is done, you must specify the "log =>
176 1" argument to enable it.
177
178 $path = make_example_dir()
179 This will create a temporary directory with 't', 't2', and 'xt'
180 subdirectories each of which will contain a single passing test.
181
183 The source code repository for Test2-Harness can be found at
184 http://github.com/Test-More/Test2-Harness/.
185
187 Chad Granum <exodist@cpan.org>
188
190 Chad Granum <exodist@cpan.org>
191
193 Copyright 2020 Chad Granum <exodist7@gmail.com>.
194
195 This program is free software; you can redistribute it and/or modify it
196 under the same terms as Perl itself.
197
198 See http://dev.perl.org/licenses/
199
200
201
202perl v5.32.0 2020-07-28 App::Yath::Tester(3)