Mocking is usually discouraged when using Cucumber; ideally you would exercise as much of your stack as possible. There are cases when using mocking can come in handy. For example, if your system depends on a third party. If you have a dependency on an external system, we recommend using stubs instead of mocks. You can set up mocks with expectations in your step definitions.


RSpec 2.x

Starting with Cucumber 0.8.4, you can use all of RSpec’s supported mocking frameworks (RSpec, Mocha, RR, Flexmock). Use require 'cucumber/rspec/doubles' (test-double is a more generic term than mocks and stubs).

Perhaps place your stub action within a block as below:

require 'cucumber/rspec/doubles'

RSpec::Mocks.with_temporary_scope do
stub_resp = {"city"=>"San Francisco", "state_abbreviation"=>"CA", "state"=>"California", "mailable_city"=>true}

click_button "check zip"


Different mocking frameworks may serve different purposes.


Mockito is a framework for the creation of test doubles in automated unit tests for the purpose of TDD or BDD.


You can use MockServer for mocking any system you integrate with via HTTP or HTTPS (i.e. services, web sites, etc).


WireMock is a simulator for HTTP-based APIs, similar to MockServer.


If you are using cucumber-js, there are many test frameworks to choose from. Which one you use, may depend on other JavaScript frameworks your project is using and / or personal preference.

You can help us improve this documentation. Edit this page.