* [DEPRECATION] By default all matchers perform expectations, use with_stubs => true if you want otherwise. * [DEPRECATION] mock_models now creates model_proc instead of mock_model. Altough this won't fire any deprecation warning, all the documentation was changed. * assert_valid_keys on expects * mock_models now creates a second class method to be used on the index action [#71] In other words, mock_models :project will create: def self.mock_project proc { mock_project } end # This was added to be used on index actions def self.mock_projects proc { [ mock_project ] } end def mock_project(stubs={}) @project ||= mock_model(Project, stubs) end * Allow multiple args to be given to :with in expects. If you need to verify that an array is being sent, you need to send an array inside another array [#70] * Allow procs or blocks to be given to respond_with_body and respond_with :body [#67] * Allow ordered to be given to macro stubs as option [#66] # v3.1 * Ensure set_cookies and set_session work with arrays [#55] * Added set_cookies matcher [#51] * Add a helper to declare that a XmlHttpRequest should be performed: describe :get => :show do xhr! * Macro stubs now supports blocks too [#50] expects :human_attribute_name, :on => Project, :with => :title do |attr| attr.to_s.humanize end * :to option in set_session and set_the_flash now accepts Regexp [#46] * render_template now works with partials [#43] * Added to support for routing example group (inside spec/routing) [#26] # v3.0 * redirect_to and render_template were ported from rspec-rails to remarkable to provide I18n. The second was also extended to deal with :with, :layout and :content_type as options. render_with_layout, render_without_layout delegate their logic to render_template so they share the same options. respond_with_content_type and respond_wity_body delegate their logic to respond_with matcher, so they also share the same options. :set_the_flash was also redesign to inherit from :set_session, providing a consistent API. * remarkable_rails now ships with a new feature, called macro stubs. This allows you to declare just once your mocks and/or expectations, and each matcher will know how to deal with properly. A TasksController could have your specs for a create action rewritten like this: describe TasksController do mock_models :task describe :post => :create, :task => { :these => 'params' } do expects :new, :on => Task, with => {'these' => 'params'}, :returns => task_proc expects :save, :on => mock_task, :returns => true should_assign_to :task, :with => task_proc should_redirect_to { task_url(mock_task) } end end It automatically performs the action before running each macro. In assign_to, it executes the expects as expectations (:should_receive), and in redirect_to it executes the expects as stubs (:stub!), just as above. For more options, information and configuration, check macro stubs documentation. # v2.x * Added assign_to, filter_params, render_with_layout, respond_with respond_with_content_type, route, set_session and set_the_flash matchers.