[rspec-users] Mocks in StoryRunner

James Hughes hughes.james at gmail.com
Fri Sep 14 19:44:35 EDT 2007


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


More information about the rspec-users mailing list