RSpec attribute specifier

I use Sinatra (1.2) and RSpec (2.5) and would like to create a new object with the TDD style attribute. Here's what the end result should look like:

class User
  def initialize(name)
    @name = name
  end
end

I know that I should write an example before implementation, but I'm trying to explain my question here. :) This is not the working specification that I still have:

describe User
  it "creates a new user object" do
    name = mock("A name")
    user = mock(User) # shouldn't do this, see the reply's
    user.should_receive(:name=).with(name)
    User.new(name)
  end
end

When I start RSpec, I get the error message "Expected: 1 time, received 0 times". Any idea how I can explain RSpec, I would like to assign an attribute to a name?

Note. I do not use Rails, not using ActiveRecord or anything else, just Ruby.

+5
source share
3 answers

, , , , :

, , mock(User), name=. . , , . mock(User) , , User ( User.should_receive(...)). -, User, name=. : -, name= ( ) , , , -, name=. , , .

, ? . , . - . @name , .

, - , - - @name, , . , User, , ( ). , , .

+12

, mocks. , . , /, , TDD. , /. , , , / . - :

describe 'login process' do
  it "displays user name after successful login" do
    user = User.new("Cimm", "cimm@somewhere.com", "secret")
    post "/login", :email => "cimm@somewhere.com", :password => "secret"
    last_response.body.should =~ /Welcome Cimm/m
  end
end

( ) . .

+5

, ?

require 'rspec'

class User
  attr_accessor :name

  def initialize(name)
    @name = name
  end 
end

describe User do
  subject {User.new "other name"}

  it "creates a new user object" do
    subject.should respond_to :name=
  end 
end
+1

All Articles