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.
, , , , :
, , mock(User), name=. . , , . mock(User) , , User ( User.should_receive(...)). -, User, name=. : -, name= ( ) , , , -, name=. , , .
mock(User)
name=
User
User.should_receive(...)
, ? . , . - . @name , .
@name
, - , - - @name, , . , User, , ( ). , , .
, 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
( ) . .
, ?
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