[Catalyst] Mocking for Catalyst testing
Tomas Doran
bobtfish at bobtfish.net
Sun Jan 17 20:23:32 GMT 2010
On 17 Jan 2010, at 18:36, Stuart Watt wrote:
> On 2010-01-16, at 10:31 PM, Tomas Doran wrote:
>
>> I tend to just use Moose directly to construct mock classes for me:
>
> Things are improving, t0m. I tried
>
> use Class::MOP;
> use Class::MOP::Class;
> my $meta_refreshes = Class::MOP::Class-
> >create('ARMAdmin::Model::Refreshes');
> $meta_refreshes->add_method('get_profiles' => sub { die("Failed to
> get profiles"); });
>
> Then I start the app in the test framework. I'm just after getting
> the get_profiles mocked method called here, later I want it to
> return values I can test in the generated page.
>
> However, Catalyst then calls:
>
> Catalyst::Utils::ensure_class_loaded( $component, { ignore_loaded =>
> 1 } );
Right, hang on.. Why are you mocking things and then loading the
entire application?
Usually you either run the full app for system testing (with test
config that points at a test DB or whatever), or you mock _lots of
stuff_ (like the context class, the request and response) and unit
test one component..
Trying to mangle methods then load the full app won't work..
If you reaaaaalllly need to do this - use Catalyst::Test 'MyApp', then
manipulate the class after catalyst has loaded it (e.g my $meta =
MyApp::Model::Foo->meta; $meta->remove_method('bar'); $meta-
>add_method('bar' => sub { die("New bar") }); )
but I'd not recommend it..
Cheers
t0m
More information about the Catalyst
mailing list