Hi guys, been following for about 3 weeks, first question -

I've been spending the last couple of months learning RSpec and Cucumber and I'm just finally starting to see the "big picture", at least I think I am. But I've got some questions I was hoping you guys can clear up. I'm sure this has been asked a lot, so please bare with me. Just let me know when my logic is wrong or when I'm way off course. You guys have been a kind group, so I'm not to concerned with sounding foolish.

I've been using .should_receive and .stub to let my spec know that my controller is going to be making a method call. I know .should_receive will fail when you don't call that method (or if you call it more times than you said you would) and I use stub when It's going to get called an unpredictable amount of times, like in a before block. To me, it sounds like I don't really know what the difference is, and I just have some understanding of there symptoms.

When i need to talk about a model, I usually use mock_model. I have Factory_girl, but I've heard that you should be careful when using Factory girl, as it ties you down to the requirements of the attributes, and not the overall functionality (although, that statement may not be true in itself). So normally, I use Factories in Cucumber, as that is concerned with more higher level usage features, and mock_models for controller/model specs.

Alot of times, however, I feel like I'm doing way to much work to get the whole thing working. Maybe I am, maybe I'm not, only way is to show off what I'm doing.

app/controller/projects_controller#create

  def create
@client = current_user.company.clients.find(params[:project] [:client_id])
      @project = @client.projects.build(params[:project])
      if @client.save
        flash[:notice] = "Added: #...@project.name}"
      else
        render :new
      end
  end


spec/controller/projects_controller_spec

describe ProjectsController do
    describe "POST 'create'" do

    before do
      @current_user = mock_model(User)
      controller.stub(:current_user).and_return @current_user
      @company = mock_model(Company)
      @current_user.should_receive(:company).and_return @company
      @clients = mock("Client List")
        @company.should_receive(:clients).and_return @clients
    end

    describe "when client is found" do

      before do
        @client = mock_model(Client)
        @clients.should_receive(:find).and_return @client
      end

      describe "on successful save" do

        before do
          @projects = mock_model(ActiveRecord)
          @client.should_receive(:projects).and_return @projects
          @project = mock_model(Project)
          @projects.should_receive(:build).and_return @project
          @client.should_receive(:save).and_return true
          @project.should_receive(:name).and_return "New Project"
        end

        it "should set up the flash" do
          post "create", {:project => {:client_id => 1}}
          flash[:notice].should_not be_nil
        end

       end

    end

  end


end


Let me know how it sounds, and it looks like I'm doing so far

Thanks,
Frank









_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to