Re: [Rails] Cucumber test question

2014-02-13 Thread Vell
Alexandru-Emil hit was right on. Once I took out the assertion for creating
the record, once I finally get down to where I am executing my method the
record is still there.


On Wed, Feb 12, 2014 at 6:48 PM, Alexandru-Emil Lupu wrote:

> Hello!
> I might be wrong, but i think this is causing you problems:
>
> Given(/^there is at least (\d+) staff info record$/) do |arg1|
>  assert_difference('StaffInfo.count', 1) do
>@staff_info = FactoryGirl.create :staff_info
>  end
> end
>
> When(/^the shirt size field is empty$/) do
>  assert @staff_info.update_attribute(:shirt_size, nil)
> end
>
>
> Most probably is because you are combining cucumber with Rails test,
> meaning you managed to perform a test in a test ... Those assertions might
> be your problem...
>
> I haven't met this behavior, but most probably your databse_cleaner is
> cleaning your test after those assertions, which is inside your scenario.
>
> I'd go for something like this:
>
> # Populating my Db and Make sure i have at least one
> Given /^there is at least (\d+) staff info record$/ do |arg1|
>   @staff_info = FactoryGirl.create :staff_info
>   (arg1.to_i - 1).times do
> FactoryGirl.create :staff_info
>   end
> end
>
> # Make sure my model is empty
> When /^the shirt size field is empty$/ do
>  @staff_info.update_attribute(:shirt_size, nil)
> end
>
> 
>
> In my support env.rb i would add
>
> World FactoryGirl::Syntax::Methods
>
> Then use create(:staff_info) instead of full FactoryGirl.create syntax ...
>
> Tks.
> A.
>
> On 12 Feb 2014, at 15:43, jsnark  wrote:
>
>
>
> On Tuesday, February 11, 2014 3:43:40 PM UTC-5, Vell wrote:
>>
>> Hello all,
>>
>> I am trying to understand when I try to run a test in cucumber what I am
>> missing that it is failing. I am using FactoryGirl to create my records and
>> using cucumber to test my logic however I know that I am doing something
>> wrong in my testing I just can't seem to figure out what. Here is what I
>> have:
>>
>> Feature:
>>
>> Feature: All features related to staff info
>>   Scenario: notification for empty shirt size
>> Given there is at least 1 staff info record
>> When the shirt size field is empty
>> And the shirt size check is run
>> Then the system should send an email notification
>>
>> Steps:
>>
>> Given(/^there is at least (\d+) staff info record$/) do |arg1|
>>   assert_difference('StaffInfo.count', 1) do
>> @staff_info = FactoryGirl.create :staff_info
>>   end
>> end
>>
>> When(/^the shirt size field is empty$/) do
>>   assert @staff_info.update_attribute(:shirt_size, nil)
>> end
>>
>> When(/^the shirt size check is run$/) do
>>   StaffInfo.check_empty_shirt_fields
>> end
>>
>> Then(/^the system should send an email notification$/) do
>>   pending # express the regexp above with the code you wish you had
>> end
>>
>> Model:
>>
>> class StaffInfo < ActiveRecord::Base
>>   belongs_to :person
>>   scope :empty_shirt_fields, -> { where('shirt_size in (?)', [nil, '']) }
>>
>>   def self.check_empty_shirt_fields
>> staff_with_missing_shirt_sizes = StaffInfo.empty_shirt_fields
>> debugger
>> send_empty_shirt_size_notification staff_with_missing_shirt_sizes if
>> staff_with_missing_shirt_sizes.size >  0
>>   end
>>
>>   def send_empty_shirt_size_notification(staff_records)
>> Mailer.missing_shirt_size(staff_records).deliver
>>   end
>> end
>>
>> What is happening is, when I hit the 3rd test I did a check to see if the
>> record was present (StaffInfo.count) and it was. But after running
>> StaffInfo.check_empty_shirt_fields, I did a check for the record and it
>> was gone. I am not understanding how my record could have disappeared when
>> I all my method was doing was checking for any records with a missing field.
>>
>> Anyone have any ideas?
>>
>
> The default behavior of cucumber is to run each scenario in a transaction
> and then do a rollback when the scenario completes.  The behavior is
> specified by the DatabaseCleaner.strategy in the env.rb file/
>
> --
> You received this message because you are subscribed to the Google Groups
> "Ruby on Rails: Talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to rubyonrails-talk+unsubscr...@googlegroups.com.
>
> To post to this group, send email to rubyonrails-talk@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/rubyonrails-talk/f1a540c9-e0db-41bb-8430-41863b7eae72%40googlegroups.com
> .
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>  --
> You received this message because you are subscribed to a topic in the
> Google Groups "Ruby on Rails: Talk" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/rubyonrails-talk/U7nmztmWmzA/unsubscribe
> .
> To unsubscribe from this group and all its topics, send an email to
> rubyonrails-talk+unsubscr...@googlegroups.com.
> To post to this group, send email to rubyonrails-talk@googlegroups.com.
> To view this dis

Re: [Rails] Cucumber test question

2014-02-12 Thread Alexandru-Emil Lupu
Hello! 
I might be wrong, but i think this is causing you problems: 

Given(/^there is at least (\d+) staff info record$/) do |arg1|
 assert_difference('StaffInfo.count', 1) do
   @staff_info = FactoryGirl.create :staff_info
 end
end

When(/^the shirt size field is empty$/) do
 assert @staff_info.update_attribute(:shirt_size, nil)
end


Most probably is because you are combining cucumber with Rails test, meaning 
you managed to perform a test in a test ... Those assertions might be your 
problem... 

I haven't met this behavior, but most probably your databse_cleaner is cleaning 
your test after those assertions, which is inside your scenario. 

I'd go for something like this:

# Populating my Db and Make sure i have at least one 
Given /^there is at least (\d+) staff info record$/ do |arg1|
  @staff_info = FactoryGirl.create :staff_info
  (arg1.to_i - 1).times do 
FactoryGirl.create :staff_info
  end
end 

# Make sure my model is empty 
When /^the shirt size field is empty$/ do
 @staff_info.update_attribute(:shirt_size, nil)
end



In my support env.rb i would add 

World FactoryGirl::Syntax::Methods

Then use create(:staff_info) instead of full FactoryGirl.create syntax ... 

Tks. 
A.

On 12 Feb 2014, at 15:43, jsnark  wrote:

> 
> 
> On Tuesday, February 11, 2014 3:43:40 PM UTC-5, Vell wrote:
> Hello all,
> 
> I am trying to understand when I try to run a test in cucumber what I am 
> missing that it is failing. I am using FactoryGirl to create my records and 
> using cucumber to test my logic however I know that I am doing something 
> wrong in my testing I just can't seem to figure out what. Here is what I have:
> 
> Feature:
> 
> Feature: All features related to staff info
>   Scenario: notification for empty shirt size
> Given there is at least 1 staff info record
> When the shirt size field is empty
> And the shirt size check is run
> Then the system should send an email notification
> 
> Steps:
> 
> Given(/^there is at least (\d+) staff info record$/) do |arg1|
>   assert_difference('StaffInfo.count', 1) do
> @staff_info = FactoryGirl.create :staff_info
>   end
> end
> 
> When(/^the shirt size field is empty$/) do
>   assert @staff_info.update_attribute(:shirt_size, nil)
> end
> 
> When(/^the shirt size check is run$/) do
>   StaffInfo.check_empty_shirt_fields
> end
> 
> Then(/^the system should send an email notification$/) do
>   pending # express the regexp above with the code you wish you had
> end
> 
> Model:
> 
> class StaffInfo < ActiveRecord::Base
>   belongs_to :person
>   scope :empty_shirt_fields, -> { where('shirt_size in (?)', [nil, '']) }
>   
>   def self.check_empty_shirt_fields
> staff_with_missing_shirt_sizes = StaffInfo.empty_shirt_fields
> debugger
> send_empty_shirt_size_notification staff_with_missing_shirt_sizes if 
> staff_with_missing_shirt_sizes.size >  0
>   end
>   
>   def send_empty_shirt_size_notification(staff_records)
> Mailer.missing_shirt_size(staff_records).deliver
>   end
> end
> 
> What is happening is, when I hit the 3rd test I did a check to see if the 
> record was present (StaffInfo.count) and it was. But after running   
> StaffInfo.check_empty_shirt_fields, I did a check for the record and it was 
> gone. I am not understanding how my record could have disappeared when I all 
> my method was doing was checking for any records with a missing field.
> 
> Anyone have any ideas?
> 
> The default behavior of cucumber is to run each scenario in a transaction and 
> then do a rollback when the scenario completes.  The behavior is specified by 
> the DatabaseCleaner.strategy in the env.rb file/
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Ruby on Rails: Talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to rubyonrails-talk+unsubscr...@googlegroups.com.
> To post to this group, send email to rubyonrails-talk@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/rubyonrails-talk/f1a540c9-e0db-41bb-8430-41863b7eae72%40googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to rubyonrails-talk+unsubscr...@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-talk/AA719BA5-3853-4613-8A93-D5E7DF899EB7%40gmail.com.
For more options, visit https://groups.google.com/groups/opt_out.