Search code examples
rubyruby-on-rails-3rspecrspec2rspec-rails

Testing after_create with rspec


I have code in my model.

class Foo < ActiveRecord::Base
 after_create :create_node_for_foo

   def create_node_for_user
     FooBar.create(id: self.id)
   end
end

and have code in rspec of Foo model

describe Foo do

  let (:foo) {FactoryGirl.create(:foo)}

  subject { foo }
  it { should respond_to(:email) }
  it { should respond_to(:fullname) }

 it "have mass assignable attributes" do
  foo.should allow_mass_assignment_of :email
  foo.should allow_mass_assignment_of :fullname
 end

 it "create node in graph database" do
   foo1 = FactoryGirl.create(:foo)
   FooBar.should_receive(:create).with(id: foo1.id)
 end
end

but my test is failing with message

Failures:

   1) Foo create node in graph database on
      Failure/Error: FooBar.should_receive(:create).with(id: foo1.id)
      (<FooBar (class)>).create({:id=>18})
       expected: 1 time
       received: 0 times

What might be wrong?


Solution

  • Okay got around with problem

    changed this

     it "create node in graph database" do
      foo1 = FactoryGirl.create(:foo)
      FooBar.should_receive(:create).with(id: foo1.id)
    end
    

    to

     it "create node in graph database" do
      foo1 = FactoryGirl.build(:foo)
      FooBar.should_receive(:create).with(id: foo1.id)
      foo1.save
    end