1Test::Moose::More(3) User Contributed Perl Documentation Test::Moose::More(3)
2
3
4
6 Test::Moose::More - More tools for testing Moose packages
7
9 This document describes version 0.050 of Test::Moose::More - released
10 September 20, 2017 as part of Test-Moose-More.
11
13 use Test::Moose::More;
14
15 is_class_ok 'Some::Class';
16 is_role_ok 'Some::Role';
17 has_method_ok 'Some::Class', 'foo';
18
19 # ... etc
20
22 This package contains a number of additional tests that can be employed
23 against Moose classes/roles. It is intended to replace Test::Moose in
24 your tests, and re-exports any tests that it has and we do not, yet.
25
26 Export Groups
27 By default, this package exports all test functions. You can be more
28 selective, however, and there are a number of export groups (aside from
29 the default ":all") to help you achieve those dreams!
30
31 :all
32 All exportable functions.
33
34 :validate
35 "validate_attribute", "validate_class", "validate_role",
36 "validate_thing"
37
39 meta_ok $thing
40 Tests $thing to see if it has a metaclass; $thing may be the class name
41 or instance of the class you wish to check. Passes if $thing has a
42 metaclass.
43
44 no_meta_ok $thing
45 Tests $thing to see if it does not have a metaclass; $thing may be the
46 class name or instance of the class you wish to check. Passes if
47 $thing does not have a metaclass.
48
49 does_ok $thing, < $role | \@roles >, [ $message ]
50 Checks to see if $thing does the given roles. $thing may be the class
51 name or instance of the class you wish to check.
52
53 Note that the message will be taken verbatim unless it contains %s
54 somewhere; this will be replaced with the name of the role being tested
55 for.
56
57 does_not_ok $thing, < $role | \@roles >, [ $message ]
58 Checks to see if $thing does not do the given roles. $thing may be the
59 class name or instance of the class you wish to check.
60
61 Note that the message will be taken verbatim unless it contains %s
62 somewhere; this will be replaced with the name of the role being tested
63 for.
64
65 has_attribute_ok $thing, $attribute_name, [ $message ]
66 Checks $thing for an attribute named $attribute_name; $thing may be a
67 class name, instance, or role name.
68
69 has_method_ok $thing, @methods
70 Queries $thing's metaclass to see if $thing has the methods named in
71 @methods.
72
73 Note: This does not include inherited methods; see "has_method" in
74 Class::MOP::Class.
75
76 has_no_method_ok $thing, @methods
77 Queries $thing's metaclass to ensure $thing does not provide the
78 methods named in @methods.
79
80 Note: This does not include inherited methods; see "has_method" in
81 Class::MOP::Class.
82
83 has_method_from_anywhere_ok $thing, @methods
84 Queries $thing's metaclass to see if $thing has the methods named in
85 @methods.
86
87 Note: This does include inherited methods; see "find_method_by_name" in
88 Class::MOP::Class.
89
90 has_no_method_from_anywhere_ok $thing, @methods
91 Queries $thing's metaclass to ensure $thing does not provide the
92 methods named in @methods.
93
94 Note: This does include inherited methods; see "find_method_by_name" in
95 Class::MOP::Class.
96
97 method_from_pkg_ok $thing, $method, $orig_pkg
98 Given a thing (role, class, etc) and a method, test that it originally
99 came from $orig_pkg.
100
101 method_not_from_pkg_ok $thing, $method, $orig_pkg
102 Given a thing (role, class, etc) and a method, test that it did not
103 come from $orig_pkg.
104
105 method_is_accessor_ok $thing, $method
106 Given a thing (role, class, etc) and a method, test that the method is
107 an accessor -- that is, it descends from Class::MOP::Method::Accessor.
108
109 method_is_not_accessor_ok $thing, $method
110 Given a thing (role, class, etc) and a method, test that the method is
111 not an accessor -- that is, it does not descend from
112 Class::MOP::Method::Accessor.
113
114 definition_context_ok $meta, \%dc
115 Validates the definition context of a metaclass instance. This is a
116 strict comparison.
117
118 role_wraps_around_method_ok $role, @methods
119 Queries $role's metaclass to see if $role wraps the methods named in
120 @methods with an around method modifier.
121
122 role_wraps_before_method_ok $role, @methods
123 Queries $role's metaclass to see if $role wraps the methods named in
124 @methods with an before method modifier.
125
126 role_wraps_after_method_ok $role, @methods
127 Queries $role's metaclass to see if $role wraps the methods named in
128 @methods with an after method modifier.
129
130 requires_method_ok $thing, @methods
131 Queries $thing's metaclass to see if $thing requires the methods named
132 in @methods.
133
134 Note that this really only makes sense if $thing is a role.
135
136 does_not_require_method_ok $thing, @methods
137 Queries $thing's metaclass to ensure $thing does not require the
138 methods named in @methods.
139
140 Note that this really only makes sense if $thing is a role.
141
142 is_immutable_ok $thing
143 Passes if $thing is immutable.
144
145 is_not_immutable_ok $thing
146 Passes if $thing is not immutable; that is, is mutable.
147
148 is_pristine_ok $thing
149 Passes if $thing is pristine. See "is_pristine" in Class::MOP::Class.
150
151 is_not_pristine_ok $thing
152 Passes if $thing is not pristine. See "is_pristine" in
153 Class::MOP::Class.
154
155 is_role_ok $thing
156 Passes if "$thing's" metaclass is a Moose::Meta::Role.
157
158 is_class_ok $thing
159 Passes if "$thing's" metaclass is a Moose::Meta::Class.
160
161 is_anon_ok $thing
162 Passes if $thing is "anonymous".
163
164 is_not_anon_ok $thing
165 Passes if $thing is not "anonymous".
166
167 check_sugar_removed_ok $thing
168 Ensures that all the standard Moose sugar is no longer directly
169 callable on a given package.
170
171 check_sugar_ok $thing
172 Checks and makes sure a class/etc can still do all the standard Moose
173 sugar.
174
175 does_metaroles_ok $thing => { $mop => [ @traits ], ... };
176 Validate the metaclasses associated with a class/role metaclass.
177
178 e.g., if I wanted to validate that the attribute trait for
179 MooseX::AttributeShortcuts is actually applied, I could do this:
180
181 { package TestClass; use Moose; use MooseX::AttributeShortcuts; }
182 use Test::Moose::More;
183 use Test::More;
184
185 does_metaroles_ok TestClass => {
186 attribute => ['MooseX::AttributeShortcuts::Trait::Attribute'],
187 };
188 done_testing;
189
190 This function will accept either class or role metaclasses for $thing.
191
192 The MOPs available for classes (Moose::Meta::Class) are:
193
194 class
195 attribute
196 method
197 wrapped_method
198 instance
199 constructor
200 destructor
201
202 The MOPs available for roles (Moose::Meta::Role) are:
203
204 role
205 attribute
206 method
207 required_method
208 wrapped_method
209 conflicting_method
210 application_to_class
211 application_to_role
212 application_to_instance
213 applied_attribute
214
215 Note! Neither this function nor does_not_metaroles_ok() attempts to
216 validate that the MOP type passed in is a member of the above lists.
217 There's no gain here in implementing such a check, and a negative to be
218 had: specifying an invalid MOP type will result in immediate
219 explosions, while it's entirely possible other MOP types will be added
220 (either to core, via traits, or "let's subclass Moose::Meta::Class/etc
221 and implement something new").
222
223 does_not_metaroles_ok $thing => { $mop => [ @traits ], ... };
224 As with "does_metaroles_ok", but test that the metaroles are not
225 consumed, a la "does_not_ok".
226
227 attribute_options_ok
228 Validates that an attribute is set up as expected; like
229 validate_attribute(), but only concerns itself with attribute options.
230
231 Note that some of these options will skip if used against attributes
232 defined in a role.
233
234 • "-subtest => 'subtest name...'"
235
236 If set, all tests run (save the first, "does this thing even have
237 this attribute?" test) will be wrapped in a subtest, the name of
238 which will be whatever "-subtest" is set to.
239
240 • "is => ro|rw"
241
242 Tests for reader/writer options set as one would expect.
243
244 • "isa => ..."
245
246 Validates that the attribute requires its value to be a given type.
247
248 • "does => ..."
249
250 Validates that the attribute requires its value to do a given role.
251
252 • "builder => '...'"
253
254 Validates that the attribute expects the method name given to be
255 its builder.
256
257 • "default => ..."
258
259 Validates that the attribute has the given default.
260
261 • "init_arg => '...'"
262
263 Validates that the attribute has the given initial argument name.
264
265 • "lazy => 0|1"
266
267 Validates that the attribute is/isn't lazy.
268
269 • "required => 0|1"
270
271 Validates that setting the attribute's value is/isn't required.
272
274 validate_thing
275 Runs a bunch of tests against the given $thing, as defined:
276
277 validate_thing $thing => (
278
279 attributes => [ ... ],
280 methods => [ ... ],
281 isa => [ ... ],
282
283 # ensures sugar is/is-not present
284 sugar => 0,
285
286 # ensures $thing does these roles
287 does => [ ... ],
288
289 # ensures $thing does not do these roles
290 does_not => [ ... ],
291 );
292
293 $thing can be the name of a role or class, an object instance, or a
294 metaclass.
295
296 • "-subtest => 'subtest name...'"
297
298 If set, all tests run will be wrapped in a subtest, the name of
299 which will be whatever "-subtest" is set to.
300
301 • "isa => [ ... ]"
302
303 A list of superclasses thing should have.
304
305 • "anonymous => 0|1"
306
307 Check to see if the class is/isn't anonymous.
308
309 • "does => [ ... ]"
310
311 A list of roles the thing should do.
312
313 • "does_not => [ ... ]"
314
315 A list of roles the thing should not do.
316
317 • "attributes => [ ... ]"
318
319 The attributes list specified here is in the form of a list of
320 names, each optionally followed by a hashref of options to test the
321 attribute for; this hashref takes the same arguments
322 "validate_attribute" does. e.g.:
323
324 validate_thing $thing => (
325
326 attributes => [
327 'foo',
328 'bar',
329 baz => { is => 'ro', ... },
330 'bip',
331 ],
332 );
333
334 • "methods => [ ... ]"
335
336 A list of methods the thing should have; see "has_method_ok".
337
338 • "no_methods => [ ... ]"
339
340 A list of methods the thing should not have; see
341 "has_no_method_ok".
342
343 • "sugar => 0|1"
344
345 Ensure that thing can/cannot do the standard Moose sugar.
346
347 • "metaclasses => { $mop => { ... }, ... }"
348
349 Validates this thing's metaclasses: that is, given a MOP type (e.g.
350 class, attribute, method, ...) and a hashref, find the associated
351 metaclass of the given type and invoke "validate_thing" on it,
352 using the hashref as options for validate_thing().
353
354 e.g.
355
356 validate_thing 'TestClass' => (
357 metaclasses => {
358 attribute => {
359 isa => [ 'Moose::Meta::Attribute' ],
360 does => [ 'MetaRole::attribute' ],
361 },
362 },
363 );
364
365 ...yields:
366
367 # Subtest: Checking the attribute metaclass, Moose::Meta::Class::__ANON__::SERIAL::1
368 ok 1 - TestClass's attribute metaclass has a metaclass
369 ok 2 - TestClass's attribute metaclass is a Moose class
370 ok 3 - TestClass's attribute metaclass isa Moose::Meta::Attribute
371 ok 4 - TestClass's attribute metaclass does MetaRole::attribute
372 1..4
373 ok 1 - Checking the attribute metaclass, Moose::Meta::Class::__ANON__::SERIAL::1
374
375 Note that validate_class() and validate_role() implement this using
376 "class_metaclasses" and "role_metaclasses", respectively.
377
378 validate_role
379 The same as validate_thing(), but ensures $thing is a role, and allows
380 for additional role-specific tests.
381
382 validate_role $thing => (
383
384 required_methods => [ ... ],
385
386 # ...and all other options from validate_thing()
387 );
388
389 • "-compose => 0|1"
390
391 When true, attempt to compose the role into an anonymous class,
392 then use it to run "validate_class". The options we're given are
393 passed to validate_class() directly, except that any
394 "required_methods" entry is removed and its contents pushed onto
395 "methods". (A stub method for each entry in "required_methods"
396 will also be created in the new class.)
397
398 e.g.:
399
400 ok 1 - TestRole has a metaclass
401 ok 2 - TestRole is a Moose role
402 ok 3 - TestRole requires method blargh
403 ok 4 - TestRole does TestRole
404 ok 5 - TestRole does not do TestRole::Two
405 ok 6 - TestRole has method method1
406 ok 7 - TestRole has an attribute named bar
407 # Subtest: role composed into Moose::Meta::Class::__ANON__::SERIAL::1
408 ok 1 - TestRole's composed class has a metaclass
409 ok 2 - TestRole's composed class is a Moose class
410 ok 3 - TestRole's composed class does TestRole
411 ok 4 - TestRole's composed class does not do TestRole::Two
412 ok 5 - TestRole's composed class has method method1
413 ok 6 - TestRole's composed class has method blargh
414 ok 7 - TestRole's composed class has an attribute named bar
415 1..7
416 ok 8 - role composed into Moose::Meta::Class::__ANON__::SERIAL::1
417 1..8
418
419 • "-subtest => 'subtest name...'"
420
421 If set, all tests run will be wrapped in a subtest, the name of
422 which will be whatever "-subtest" is set to.
423
424 • "required_methods => [ ... ]"
425
426 A list of methods the role requires a consuming class to supply.
427
428 • "before => [ ... ]"
429
430 A list of methods the role expects to wrap before, on application
431 to a class.
432
433 See "before" in Moose for information on before method modifiers.
434
435 • "around => [ ... ]"
436
437 A list of methods the role expects to wrap around, on application
438 to a class.
439
440 See "around" in Moose for information on around method modifiers.
441
442 • "after => [ ... ]"
443
444 A list of methods the role expects to wrap after, on application to
445 a class.
446
447 See "after" in Moose for information on after method modifiers.
448
449 • "role_metaroles => { $mop => [ $role, ... ], ... }"
450
451 Checks metaclasses to ensure the given metaroles are applied. See
452 "does_metaroles_ok".
453
454 • "no_role_metaroles => { $mop => [ $role, ... ], ... }"
455
456 Checks metaclasses to ensure the given metaroles are applied. See
457 "does_not_metaroles_ok".
458
459 • "role_metaclasses => { $mop => { ... }, ... }"
460
461 Validates this role's metaclasses: that is, given a MOP type (e.g.
462 role, attribute, method, ...) and a hashref, find the associated
463 metaclass of the given type and invoke "validate_thing" on it,
464 using the hashref as options for validate_thing().
465
466 e.g.
467
468 validate_role 'TestRole' => (
469 metaclasses => {
470 attribute => {
471 isa => [ 'Moose::Meta::Attribute' ],
472 does => [ 'MetaRole::attribute' ],
473 },
474 },
475 );
476
477 ...yields:
478
479 # Subtest: Checking the attribute metaclass, Moose::Meta::Class::__ANON__::SERIAL::1
480 ok 1 - TestRole's attribute metaclass has a metaclass
481 ok 2 - TestRole's attribute metaclass is a Moose class
482 ok 3 - TestRole's attribute metaclass isa Moose::Meta::Attribute
483 ok 4 - TestRole's attribute metaclass does MetaRole::attribute
484 1..4
485 ok 1 - Checking the attribute metaclass, Moose::Meta::Class::__ANON__::SERIAL::1
486
487 Note that validate_class() and validate_role() implement this using
488 "class_metaclasses" and "role_metaclasses", respectively.
489
490 • "class_metaclasses => { $mop => { ... }, ... }"
491
492 As with role_metaclasses, above, except that this option is only
493 used if "-compose" is also specified.
494
495 validate_class
496 The same as validate_thing(), but ensures $thing is a class, and allows
497 for additional class-specific tests.
498
499 validate_class $thing => (
500
501 isa => [ ... ],
502
503 attributes => [ ... ],
504 methods => [ ... ],
505
506 # ensures sugar is/is-not present
507 sugar => 0,
508
509 # ensures $thing does these roles
510 does => [ ... ],
511
512 # ensures $thing does not do these roles
513 does_not => [ ... ],
514
515 # ...and all other options from validate_thing()
516 );
517
518 • "-subtest => 'subtest name...'"
519
520 If set, all tests run will be wrapped in a subtest, the name of
521 which will be whatever "-subtest" is set to.
522
523 • "immutable => 0|1"
524
525 Checks the class to see if it is/isn't immutable.
526
527 • "class_metaroles => { $mop => [ $role, ... ], ... }"
528
529 Checks metaclasses to ensure the given metaroles are applied. See
530 "does_metaroles_ok".
531
532 • "no_class_metaroles => { $mop => [ $role, ... ], ... }"
533
534 Checks metaclasses to ensure the given metaroles are applied. See
535 "does_not_metaroles_ok".
536
537 • "class_metaclasses => { $mop => { ... }, ... }"
538
539 Validates this class' metaclasses: that is, given a MOP type (e.g.
540 role, attribute, method, ...) and a hashref, find the associated
541 metaclass of the given type and invoke "validate_thing" on it,
542 using the hashref as options for validate_thing().
543
544 e.g.
545
546 validate_class 'TestClass' => (
547 metaclasses => {
548 attribute => {
549 isa => [ 'Moose::Meta::Attribute' ],
550 does => [ 'MetaRole::attribute' ],
551 },
552 },
553 );
554
555 ...yields:
556
557 ok 1 - TestClass has a metaclass
558 ok 2 - TestClass is a Moose class
559 # Subtest: Checking the attribute metaclass, Moose::Meta::Class::__ANON__::SERIAL::1
560 ok 1 - TestClass's attribute metaclass has a metaclass
561 ok 2 - TestClass's attribute metaclass is a Moose class
562 ok 3 - TestClass's attribute metaclass isa Moose::Meta::Attribute
563 ok 4 - TestClass's attribute metaclass does MetaRole::attribute
564 1..4
565 ok 3 - Checking the attribute metaclass, Moose::Meta::Class::__ANON__::SERIAL::1
566
567 validate_attribute
568 validate_attribute() allows you to test how an attribute looks once
569 built and attached to a class.
570
571 Let's say you have an attribute defined like this:
572
573 has foo => (
574 traits => [ 'TestRole' ],
575 is => 'ro',
576 isa => 'Int',
577 builder => '_build_foo',
578 lazy => 1,
579 );
580
581 You can use validate_attribute() to ensure that it's built out in the
582 way you expect:
583
584 validate_attribute TestClass => foo => (
585
586 # tests the attribute metaclass instance to ensure it does the roles
587 -does => [ 'TestRole' ],
588 # tests the attribute metaclass instance's inheritance
589 -isa => [ 'Moose::Meta::Attribute' ], # for demonstration's sake
590
591 traits => [ 'TestRole' ],
592 isa => 'Int',
593 does => 'Bar',
594 handles => { },
595 reader => 'foo',
596 builder => '_build_foo',
597 default => undef,
598 init_arg => 'foo',
599 lazy => 1,
600 required => undef,
601 );
602
603 Options passed to validate_attribute() prefixed with "-" test the
604 attribute's metaclass instance rather than a setting on the attribute;
605 that is, "-does" ensures that the metaclass does a particular role
606 (e.g. MooseX::AttributeShortcuts), while "does" tests the setting of
607 the attribute to require the value do a given role.
608
609 This function takes all the options "attribute_options_ok" takes, as
610 well as the following:
611
612 • "-subtest => 'subtest name...'"
613
614 If set, all tests run will be wrapped in a subtest, the name of
615 which will be whatever "-subtest" is set to.
616
618 Please see those modules/websites for more information related to this
619 module.
620
621 • Test::Moose
622
624 Please report any bugs or feature requests on the bugtracker website
625 <https://github.com/RsrchBoy/Test-Moose-More/issues>
626
627 When submitting a bug or request, please include a test-file or a patch
628 to an existing test-file that illustrates the bug or desired feature.
629
631 Chris Weyl <cweyl@alumni.drew.edu>
632
634 • Chad Granum <chad.granum@dreamhost.com>
635
636 • Karen Etheridge <ether@cpan.org>
637
639 This software is Copyright (c) 2017, 2016, 2015, 2014, 2013, 2012 by
640 Chris Weyl.
641
642 This is free software, licensed under:
643
644 The GNU Lesser General Public License, Version 2.1, February 1999
645
646
647
648perl v5.38.0 2023-07-21 Test::Moose::More(3)