- 
                Notifications
    You must be signed in to change notification settings 
- Fork 72
TreeTDD exercise dhatten #58
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
|  | ||
| def age! | ||
| @age+=1 | ||
| @alive = false unless @age < 9 | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@alive = false if @age > 9 is probably a bit clearer.  if is generally clearer than unless, except when it isn't.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
* if is clearer than unless, unless it isn't.  😁
| @age+=1 | ||
| @alive = false unless @age < 9 | ||
| @height+=rand(20) | ||
| self.add_apples | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The self shouldn't be necessary here - self is the default receiver for every command in ruby.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Joe is right. The only time self. is needed is calling a setter method, like self.foo = "bar". Ruby will assume foo = "bar" is local variable assignment instead of calling the foo= method.
| def initialize | ||
| @height = 0 | ||
| @age = 0 | ||
| @apples = 0 | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This makes it sound like @apples will be an array of apples.  I'd say either switch the value or change the name to make clear that it's a count.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Rupert ended up doing the array design, it works out much better overall
| end | ||
|  | ||
| avg_diameter = # It's up to you to calculate the average diameter for this harvest. | ||
| avg_diameter = diameter_sum / basket.count | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This seems to assume that users of the Apple class will always initialize it with a floating point diameter, as you did above.
| it 'should be a Class' do | ||
| expect(described_class.is_a? 'Class').to be_true | ||
| describe AppleTree do | ||
| context 'when AppleTree exists' do | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure adding this context helps to clarify anything.
| subject(:tree) { AppleTree.new } | ||
| it 'should be a Class' do | ||
| expect(described_class.is_a? Class).to be true | ||
| end | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I know this is provided for you, but I really dislike this kind of test 😄 .
|  | ||
| it 'should have no apples' do | ||
| expect(tree.any_apples?).to eq false | ||
| end | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For these two tests: if it's part of the required setup for these guys that this be a brand-new tree, then the setup should go with the test.  The options are either to do the necessary setup inside the it block itself, or else to use a context/describe block.
(and some other tests below too)
|  | ||
| it 'should not be able to have an apple picked' do | ||
| expect{tree.pick_an_apple!}.to raise_error NoApplesError | ||
| end | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nice
| tree.age! | ||
| } | ||
| expect(tree.dead?).to eq true | ||
| end | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not that you need to add it, but think about testing the flip side here too: this only shows that tens years of aging kills the tree - but maybe 9 or 8 years would also kill it.
|  | ||
| it 'should have a diameter' do | ||
| expect(apple.diameter).to eq 5 | ||
| end | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice tests overall.
No description provided.