Ruby on Rails
Thursday, February 13, 2014
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 <alecslupu@gmail.com> 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_infoendendWhen(/^the shirt size field is empty$/) doassert @staff_info.update_attribute(:shirt_size, nil)endMost 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 oneGiven /^there is at least (\d+) staff info record$/ do |arg1|@staff_info = FactoryGirl.create :staff_info(arg1.to_i - 1).times doFactoryGirl.create :staff_infoendend# Make sure my model is emptyWhen /^the shirt size field is empty$/ do@staff_info.update_attribute(:shirt_size, nil)end....In my support env.rb i would addWorld FactoryGirl::Syntax::MethodsThen use create(:staff_info) instead of full FactoryGirl.create syntax ...Tks.A.On 12 Feb 2014, at 15:43, jsnark <swr@monmouth.com> wrote:You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
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/
--
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@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.
--To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/AA719BA5-3853-4613-8A93-D5E7DF899EB7%40gmail.com.
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+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
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+unsubscribe@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/CABO-7pUGakh8roNv_XojRg_WVs4JrG7CBjTejm2HbSVjSNWdDg%40mail.gmail.com.
For more options, visit https://groups.google.com/groups/opt_out.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment