I don’t have any specifics to provide other than, I would setup my world
state (if any) as context blocks. Then inside each context, I would
multiple specs to test each method setting, usually, one expectation per
spec on either the return value, or a side-effect. For side-effects, if it
changed the object under test, I would then try to look at a public API to
confirm this. If the object worked with a collaborator, I would weigh if
it’s more beneficial or makes more sense to use a real collaborator and
then inspect its state. Or if it makes more sense to inject a spy and
assert that the appropriate command action was called on it.
​

On Fri, Sep 19, 2014 at 2:34 AM, Venkata Avinash Duggirala <
[email protected]> wrote:

> Thanks a lot Aron. Successfully created the folder structure
>
> One more step of suggestion needed.  Below is the sample class I need to
> test, can you guide me how to create tests that validates the functions etc
> and how to do test coverage?
>
>
> module Nucleon
> class Codes
> #-----------------------------------------------------------------------------
>  #
> Code index @@registry = {} @@status_index = {} @@next_code = 0 #--- def
> self.registry @@registry end #--- def self.index(status_code = nil) if
> status_code.nil? || ! status_code.integer? @@status_index else status_code
> = status_code.to_i if @@status_index.has_key?(status_code) @@status_index[
> status_code] else @@status_index[registry[:unknown_status]] end end end
> #--- def self.render_index(status_code = nil) output = "Status index:\n"
> @@status_index.each do |code, name| name = name.gsub(/_/, ' ').capitalize
> if ! status_code.nil? && status_code == code output << sprintf(" [ %3i ]
> - %s\n", code, name) else output << sprintf(" %3i - %s\n", code, name) end
> end output << "\n" output end
> #-----------------------------------------------------------------------------
>  #
> Code construction def self.code(name) name = name.to_sym unless registry.
> has_key?(name) status_code = @@next_code @@next_code = @@next_code + 1 #
> TODO: Add more information to the index (like a help message) @@registry[
> name] = status_code @@status_index[status_code] = name.to_s end end #---
> def self.codes(*codes) codes.each do |name| code(name) end end
> #-----------------------------------------------------------------------------
>  #
> Return status codes on demand def [](name) name = name.to_sym if
> @@registry.has_key?(name) @@registry[name] else @@registry[:unknown_status
> ] end end #--- def method_missing(method, *args, &block) self[method] end
> #-----------------------------------------------------------------------------
>  #
> Core status codes code(:success) # This must be added first (needs to be
> 0) code(:help_wanted) code(:unknown_status) code(:action_unprocessed) code
> (:batch_error) code(:validation_failed) code(:access_denied) endend
> Thanks in advance .
>
> Regards,
> Avinash Duggirala
> Skype:avinash5302
>
> On Thursday, September 18, 2014 9:20:54 PM UTC+5:30, Aaron Kromer wrote:
>>
>> Avinash,
>>
>> Glad to hear you like RSpec. Setting up a gem project is fairly similar.
>> Just start your gem, add rspec as a development dependency and run the
>> rspec setup: rspec --init. That will create the .rspec and
>> spec/spec_helper.rb files for you. After that it’s just as normal. The
>> folder structure is up to you. In general, my suggestion is to mirror your
>> lib directory. This is in the rspec-rails docs, though it probably can
>> be added to the main rspec docs too. I’ve copied and adjusted the doc to
>> remove the rails-y part:
>>
>> It is suggested that the spec/ directory structure generally mirror both
>> app/ and lib/. This makes it easy to locate corresponding code and spec
>> files.
>>
>> *Example:*
>>
>>  lib
>>  ├── country_map
>>  │   ├── city.rb
>>  │   └── state.rb
>>  ├── country_map.rb
>>  └── tasks
>>      ├── irc.rake
>>  spec
>>  ├── country_map
>>  │   ├── city_spec.rb
>>  │   └── state_spec.rb
>>  ├── country_map_spec.rb
>>  ├── spec_helper.rb
>>  ├── support
>>  │   ├── allow_remote_requests.rb
>>  │   ├── custom_matchers.rb
>>  └── tasks
>>      ├── irc_spec.rb
>>
>> Happy specing
>> ​
>>
>> On Thu, Sep 18, 2014 at 8:08 AM, Venkata Avinash Duggirala <
>> [email protected]> wrote:
>>
>>> Hi,
>>>
>>> I need to do UNIT Testing to a gem which is in development. I want to
>>> use RSPEC framework. I am well versed in using RSPEC framework to automate
>>> web application.
>>>
>>> But, I never created a project to do unit testing a gem. Can anyone
>>> provide me how to start up, setting up the project, how folder structure
>>> should.
>>>
>>> Awaiting reply.
>>>
>>> Regards,
>>> Avinash Duggirala
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "rspec" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To post to this group, send email to [email protected].
>>> To view this discussion on the web visit https://groups.google.com/d/
>>> msgid/rspec/8271cc91-6d84-458e-8329-e2416dd61c86%40googlegroups.com
>>> <https://groups.google.com/d/msgid/rspec/8271cc91-6d84-458e-8329-e2416dd61c86%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>  --
> You received this message because you are subscribed to the Google Groups
> "rspec" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/rspec/6238056a-ac03-4b60-98f4-8cf71b71308f%40googlegroups.com
> <https://groups.google.com/d/msgid/rspec/6238056a-ac03-4b60-98f4-8cf71b71308f%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"rspec" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rspec/CAKCESdj93ZNYD_WDmCBcpw3LhDHy-nWb9wqhJQ94AYUFzW8gfw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to