Sha256: 3f866324a25f92b00add11a5e1f57664024e911954d2d8a388e6bf33db472da9

Contents?: true

Size: 1.76 KB

Versions: 1

Compression:

Stored size: 1.76 KB

Contents

Feature: fake_ar_attributes

  Instances of ActiveRecord::Base subclasses are different then most of the objects you might encounter because the field access on those classes is done by taking advantage of Ruby's `method_missing` functionality.

  Unfortunately, in order to create a fake, Bogus has to examine all of the methods that are defined on a given class and herein lies the problem, the methods that you would expect to have on your ActiveRecord models do not exist:

      class BlogPost < ActiveRecord::Base
      end

      blog_post = BlogPost.new
      blog_post.respond_to?(:name) # => true
      blog_post.method(:name) # raises NameError

  Normally, this would prevent Bogus from being able to fake those methods, but in the case of ActiveRecord we can figure out those fields by looking at the `BlogPost.columns` property. Based on that we can define those accessors on the created fake. If you wish to take advantage of that, you just need to flip a configuration switch:

      Bogus.configure do |c|
        c.fake_ar_attributes = true
      end

  Scenario: Adding missing accessors to AR classes
    Given a file named "foo.rb" with:
    """ruby
    require 'active_record'
    require 'nulldb'

    ActiveRecord::Schema.verbose = false
    ActiveRecord::Base.establish_connection :adapter => :nulldb

    ActiveRecord::Schema.define do
      create_table :blog_posts do |t|
        t.string :name
        t.string :tags
      end
    end

    class BlogPost < ActiveRecord::Base
    end

    Bogus.configure do |c|
      c.fake_ar_attributes = true
    end
    """

    Then the following test should pass:
    """ruby
    post = fake(:blog_post, name: "the name")
    stub(post).tags { "foo, bar" }

    post.name.should == "the name"
    post.tags.should == "foo, bar"
    """

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
bogus-0.1.0 features/configuration/fake_ar_attributes.feature