[rspec-users] Mocks in StoryRunner

Pat Maddox pergesu at gmail.com
Fri Sep 14 20:46:42 EDT 2007


On 9/14/07, James Hughes <hughes.james at gmail.com> wrote:
> Hi,
>
> I'm trying to get up and running with StoryRunner. I have a story that
> looks something like the following, but the call to mock_model
> produces the exception listed below. Am I just misunderstanding the
> concept? Are mocks not meant to be used in stories like this? Or is
> this a bug? Changing @user to be an actual AR object makes things run
> without error.
>
> ENV["RAILS_ENV"] = "test"
> require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
> require 'spec'
> require 'spec/rails'
> require 'spec/rails/story_adapter'
>
> Story 'Something happens', %{
>   As a user
>   I want to do something
>   So that something will happen.
> }, :type => RailsStory do
>
>   Scenario 'User doing something for first time' do
>     Given 'a user' do
>       @user = mock_model(User)
>     end
>     When 'the user makes a request' do
>     end
>     Then 'something should happen' do
>     end
>   end
> end
>
>
> Here's the stack trace:
>
> 1 scenarios: 0 succeeded, 1 failed, 0 pending
>
> FAILURES:
>   1) Something happens (User doing something for first time) FAILED
>   NoMethodError: You have a nil object when you didn't expect it!
> You might have expected an instance of Array.
> The error occurred while evaluating nil.each
>   /usr/lib/ruby/gems/1.8/gems/actionpack-1.13.3/lib/action_controller/integration.rb:519:in
> `open_session'
> /usr/lib/ruby/gems/1.8/gems/actionpack-1.13.3/lib/action_controller/integration.rb:490:in
> `reset!'
> /usr/lib/ruby/gems/1.8/gems/actionpack-1.13.3/lib/action_controller/integration.rb:546:in
> `method_missing'
> /home/jhughes/dev/rj/csite/config/../vendor/plugins/rspec/lib/spec/matchers.rb:146:in
> `method_missing'
> stories/use_case_story.rb:38:in `a logged-in user'
> /home/jhughes/dev/rj/csite/config/../vendor/plugins/rspec/lib/spec/story/simple_step.rb:13:in
> `__send__'
> /home/jhughes/dev/rj/csite/config/../vendor/plugins/rspec/lib/spec/story/simple_step.rb:13:in
> `perform'
> /home/jhughes/dev/rj/csite/config/../vendor/plugins/rspec/lib/spec/story/world.rb:58:in
> `store_and_call'
> /home/jhughes/dev/rj/csite/config/../vendor/plugins/rspec/lib/spec/story/world.rb:68:in
> `Given'
> stories/use_case_story.rb:36
> /home/jhughes/dev/rj/csite/config/../vendor/plugins/rspec/lib/spec/story/runner/scenario_runner.rb:13:in
> `instance_eval'
> /home/jhughes/dev/rj/csite/config/../vendor/plugins/rspec/lib/spec/story/runner/scenario_runner.rb:13:in
> `run'
> /home/jhughes/dev/rj/csite/config/../vendor/plugins/rspec/lib/spec/story/runner/story_runner.rb:48:in
> `run_stories'
> /home/jhughes/dev/rj/csite/config/../vendor/plugins/rspec/lib/spec/story/runner/story_runner.rb:43:in
> `each'
> /home/jhughes/dev/rj/csite/config/../vendor/plugins/rspec/lib/spec/story/runner/story_runner.rb:43:in
> `run_stories'
> /home/jhughes/dev/rj/csite/config/../vendor/plugins/rspec/lib/spec/story/runner/story_runner.rb:39:in
> `each'
> /home/jhughes/dev/rj/csite/config/../vendor/plugins/rspec/lib/spec/story/runner/story_runner.rb:39:in
> `run_stories'
> /home/jhughes/dev/rj/csite/config/../vendor/plugins/rspec/lib/spec/story/runner.rb:36:in
> `register_exit_hook'
> stories/use_case_story.rb:29
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>

No, you shouldn't be calling mock_model in Story Runner.  The whole
point of stories is to exercise the full functionality of your app.

Pat


More information about the rspec-users mailing list