Module: FlexMock::MockContainer

### Home Classes Methods

### In Files

- lib/flexmock/mock_container.rb
- lib/flexmock/rails/view_mocking.rb

### Methods

- #flexmock
- #flexmock_close
- #flexmock_created_mocks
- #flexmock_remember
- #flexmock_teardown
- #flexmock_verify
- #flexstub
- #rails_version
- #should_render_view

### Included Modules

- FlexMock::Ordering

### Files

- CHANGES
- GoogleExample.rdoc
- rspec_examples_spec.rdoc
- test_unit_examples_test.rdoc
- index.rdoc
- flexmock-0.4.0.rdoc
- flexmock-0.4.1.rdoc
- flexmock-0.4.2.rdoc
- flexmock-0.4.3.rdoc
- flexmock-0.5.0.rdoc
- flexmock-0.5.1.rdoc
- flexmock-0.6.0.rdoc
- flexmock-0.6.1.rdoc
- flexmock-0.6.2.rdoc
- flexmock-0.6.3.rdoc
- flexmock-0.6.4.rdoc
- flexmock-0.7.0.rdoc
- flexmock-0.7.1.rdoc
- flexmock-0.8.0.rdoc
- flexmock-0.8.2.rdoc
- flexmock-0.8.3.rdoc
- flexmock-0.8.4.rdoc
- flexmock-0.8.5.rdoc
- flexmock-0.9.0.rdoc
- flexmock-1.0.0.rdoc
- flexmock-1.0.3.rdoc
- flexmock-1.0.4.rdoc
- flexmock-1.1.0.rdoc
- flexmock-1.2.0.rdoc
- flexmock-1.3.0.rdoc
- flexmock-1.3.1.rdoc

### Class/Module Index

Quicksearch

- FlexMock
- FlexMock::AnyMatcher
- FlexMock::ArgumentMatching
- FlexMock::ArgumentTypes
- FlexMock::AtLeastCountValidator
- FlexMock::AtMostCountValidator
- FlexMock::CompositeExpectation
- FlexMock::CountValidator
- FlexMock::DefaultFrameworkAdapter
- FlexMock::DefaultFrameworkAdapter::AssertionFailedError
- FlexMock::DuckMatcher
- FlexMock::EqualMatcher
- FlexMock::ExactCountValidator
- FlexMock::Expectation
- FlexMock::ExpectationDirector
- FlexMock::ExpectationRecorder
- FlexMock::ExplicitNeeded
- FlexMock::GenericTestCase
- FlexMock::HashMatcher
- FlexMock::MockContainer
- FlexMock::MockContainerHelper
- FlexMock::MockError
- FlexMock::OptionalProcMatcher
- FlexMock::Ordering
- FlexMock::PartialMockProxy
- FlexMock::ProcMatcher
- FlexMock::RSpecFrameworkAdapter
- FlexMock::RSpecFrameworkAdapter::AssertionFailedError
- FlexMock::RSpecMatchers
- FlexMock::RSpecMatchers::HaveReceived
- FlexMock::Recorder
- FlexMock::SpyDescribers
- FlexMock::TestCase
- FlexMock::TestUnitAssertions
- FlexMock::TestUnitFrameworkAdapter
- FlexMock::Undefined
- FlexMock::UsageError
- FlexMock::UseContainer
- FlexMock::Version
- MiniTest
- MiniTest::Unit
- MiniTest::Unit::TestCase
- Test
- Test::Unit
- Test::Unit::TestCase
- Class
- Module
- Object
- Symbol

No matching classes.

# FlexMock::MockContainer

###################################################################### Mock container methods

Include this module in to get integration with FlexMock. When this module is included, mocks may be created with a simple call to the `flexmock` method. Mocks created with via the method call will automatically be verified in the teardown of the test case.

### Public Instance Methods

flexmock() { |mock| ... } click to toggle source
flexmock(name) { |mock| ... }
flexmock(expect_hash) { |mock| ... }
flexmock(name, expect_hash) { |mock| ... }
flexmock(real_object) { |mock| ... }
flexmock(real_object, name) { |mock| ... }
flexmock(real_object, name, expect_hash) { |mock| ... }
flexmock(:base, string, name, expect_hash) { |mock| ... }

Create a mocking object in the FlexMock framework. The `flexmock` method has a number of options available, depending on just what kind of mocking object your require. Mocks created via `flexmock` will be automatically verify during the teardown phase of your test framework.

Note: A plain flexmock() call without a block will return the mock object (the object that interprets `should_receive` and its brethern). A flexmock() call that includes a block will return the domain objects (the object that will interpret domain messages) since the mock will be passed to the block for configuration. With regular mocks, this distinction is unimportant because the mock object and the domain object are the same object. However, with partial mocks, the mock object is separation from the domain object. Keep that distinciton in mind.

name | Name of the mock object. If no name is given, "unknown" is used for full mocks and "flexmock(real_object)" is used for partial mocks.
expect_hash | Hash table of method names and values. Each method/value pair is used to setup a simple expectation so that if the mock object receives a message matching an entry in the table, it returns the associated value. No argument our call count constraints are added. Using an expect_hash is identical to calling:
    mock.should_receive(method_name).and_return(value)
for each of the method/value pairs in the hash.
real_object | If a real object is given, then a partial mock is constructed using the real_object as a base. Partial mocks (formally referred to as stubs) behave as a mock object when an expectation is matched, and otherwise will behave like the original object. This is useful when you want to use a real object for testing, but need to mock out just one or two methods.
:base | Forces the following argument to be used as the base of a partial mock object. This explicit tag is only needed if you want to use a string or a symbol as the mock base (string and symbols would normally be interpretted as the mock name).
&block | If a block is given, then the mock object is passed to the block and expectations may be configured within the block. When a block is given for a partial mock, flexmock will return the domain object rather than the mock object.

    # File lib/flexmock/mock_container.rb, line 119
    def flexmock(*args)
      location = caller.first
      name = nil
      quick_defs = {}
      domain_obj = nil
      safe_mode = false
      model_class = nil
      base_class = nil
      mock = nil
      while ! args.empty?
        case args.first
        when :base, :safe
          safe_mode = (args.shift == :safe)
          domain_obj = args.shift
        when :model
          args.shift
          model_class = args.shift
        when :on
          args.shift
          base_class = args.shift
          name ||= "#{base_class} Mock"
        when String, Symbol
          name = args.shift.to_s
        when Hash
          quick_defs = args.shift
        when FlexMock
          mock = args.shift
        else
          domain_obj = args.shift
        end
      end
      raise UsageError, "a block is required in safe mode" if safe_mode && ! block_given?

      if domain_obj
        mock = ContainerHelper.make_partial_proxy(self, domain_obj, name, safe_mode)
        result = domain_obj
      elsif model_class
        id = ContainerHelper.next_id
        mock ||= FlexMock.new("#{model_class}_#{id}", self)
        result = mock
      else
        mock ||= FlexMock.new(name || "unknown", self)
        result = mock
      end
      if base_class
        mock.flexmock_based_on(base_class)
      elsif domain_obj && FlexMock.partials_are_based
        mock.flexmock_based_on(domain_obj.class)
      end
      mock.flexmock_define_expectation(location, quick_defs)
      yield(mock) if block_given?
      flexmock_remember(mock)
      ContainerHelper.add_model_methods(mock, model_class, id, location) if model_class
      result
    end

Also aliased as: flexstub
flexmock_close() click to toggle source

Close all the mock objects in the container. Closing a mock object restores any original behavior that was displaced by the mock.

    # File lib/flexmock/mock_container.rb, line 51
    def flexmock_close
      flexmock_created_mocks.each do |m|
        m.flexmock_teardown
      end
      @flexmock_created_mocks = []
    end

flexmock_created_mocks() click to toggle source

List of mocks created in this container

    # File lib/flexmock/mock_container.rb, line 45
    def flexmock_created_mocks
      @flexmock_created_mocks ||= []
    end

flexmock_remember(mocking_object) click to toggle source

Remember the mock object / stub in the mock container.

    # File lib/flexmock/mock_container.rb, line 177
    def flexmock_remember(mocking_object)
      @flexmock_created_mocks ||= []
      @flexmock_created_mocks << mocking_object
      mocking_object.flexmock_container = self
      mocking_object
    end

flexmock_teardown() click to toggle source

Do the flexmock specific teardown stuff. If you need finer control, you can use either `flexmock_verify` or `flexmock_close`.

    # File lib/flexmock/mock_container.rb, line 31
    def flexmock_teardown
      flexmock_verify unless flexmock_test_has_failed?
    ensure
      flexmock_close
    end

flexmock_verify() click to toggle source

Perform verification on all mocks in the container.

    # File lib/flexmock/mock_container.rb, line 38
    def flexmock_verify
      flexmock_created_mocks.each do |m|
        m.flexmock_verify
      end
    end

flexstub(*args) click to toggle source
Alias for: flexmock
rails_version() click to toggle source

    # File lib/flexmock/rails/view_mocking.rb, line 6
    def rails_version
      Rails::VERSION::STRING
    end

should_render_view(template_name=nil) click to toggle source

Declare that the Rails controller under test should render the named view. If a view template name is given, it will be an error if the named view is not rendered during the execution of the contoller action. If no template name is given, then the any view may be rendered. If no view is actually rendered, then an assertion failure will occur.

    def test_my_action_does_what_it_should
      should_render_view 'show'

      get :show, :id => 1

      assert_response :success
    end

    # File lib/flexmock/rails/view_mocking.rb, line 25
    def should_render_view(template_name=nil)
      if rails_version <= '1.2.4'
        should_render_view_prior_version_124(template_name)
      elsif rails_version <= '2.0.0'
        should_render_view_after_version_124(template_name)
      elsif rails_version < '2.2'
        should_render_view_after_version_202(template_name)
      elsif rails_version < '2.3'
        should_render_view_22x(template_name)
      else
        should_render_view_23x(template_name)
      end
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.