I worded that wrong, sorry for the confusion.  I am actually trying to test for 
what a function is called with NOT what it returns.  "execute" is called with 
an Array that contains a system command and arguments.  I want to make sure 
that the array contains at least "/usr/sbin/usermod" and "-e".  If all I cared 
about was making sure the /usr/sbin/usermod was in the array this syntax works 
"provider.expects(:execute).with(includes('/usr/sbin/usermod'))"

The Mocha documentation uses this example of the includes method:
object.expects(:method_1).with(includes('foo'))

Your suggestion of using the block method appears to be exactly what I needed
        provider.expects(:execute).with() {|args| 
args.include?('/usr/sbin/usermod') and args.include?('-e') }

Thanks!

-----Original Message-----
From: [email protected] [mailto:[email protected]] On 
Behalf Of Daniel Pittman
Sent: Thursday, January 24, 2013 12:10 PM
To: [email protected]
Subject: Re: [Puppet-dev] Rspec Help

On Wed, Jan 23, 2013 at 9:35 PM, John Julien <[email protected]> wrote:
> I'm trying to write a test case that expects an array to come back 
> from a function and I want to make sure at least 2 elements exist 
> "/usr/sbin/usermod" and "-e"
>
> My code is:
>         provider.expects(:execute).with(includes('/usr/sbin/usermod'),
> includes('-e'))

That isn't valid syntax, and I can't even quite guess what you are trying to do:

Calling `.with` using arguments means "expect the function to be invoked with 
*exactly* these arguments".

If you want to check only the first two, you need to use the block version 
instead.

You are also calling the top level `include` function there, which is unlikely 
to work.  You can only invoke matchers after a `.should` or equivalent is 
applied to them.


That also doesn't seem to be testing what you say you are testing: you said you 
wanted to test "an array to come back from a function", but your example is 
testing the arguments that a function is called with.

Generally speaking, the former is a much better test.  Testing what the 
function returns is often much less tied to the implementation details than 
testing how a different function is called (presumably with the results of your 
own function.)

--
Daniel Pittman
⎋ Puppet Labs Developer – http://puppetlabs.com ♲ Made with 100 percent 
post-consumer electrons

--
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
Visit this group at http://groups.google.com/group/puppet-dev?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.



-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
Visit this group at http://groups.google.com/group/puppet-dev?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to