So, we are using MIME::Lite to generate emails from our scripts/modules. The problem I came across in
testing was:
How do I test the $msg->send() to see that the email I have generated is what was expected?
In Ruby on Rails, the test framework automatically allows for email to be appended to an array, which
you can then test against.
I want something like this in PERL!
Well, it turns out that I can.
After the module using MIME::Lite has been loaded, and my object created, do the following before running a method calling $msg->send(); ($model is an object created from xx.pm containing the method you want to call $msg->send() from)
my $sub = sub {
my $msg = shift;
push @{$model->{emails}}, $msg->as_string;
return;
};
MIME::Lite->send('sub', $sub);
Now, if you run the method containing $msg->send(), you can then access an array, where each element contain the MIME::Lite output of the email generated (and no emails would have been sent, thus not spamming people at random:).
If you model method only creates a MIME::Lite object, and you are testing what a script might do with it, then an alternative $sub is
my $sub = sub {
my $msg = shift;
return $msg->as_string();
};
MIME::Lite->send('sub', $sub);
Then yous can happily do:
my $email = $msg->send();
and test $email to your hearts content, including sending it through MIME::Parser to obtain the headers, attachments, body etc.
I hope this may be of help for someone.
Andy
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment