We try to keep our books accurate, but sometimes mistakes creep in. This page lists the errors submitted by our astute readers. If you've found a new error, please submit it.

The latest version of the book is B13.0, released 20 days ago. If you've bought a PDF of the book and would like to upgrade it to this version (for free), visit your home page.

Key: Typo Tech. Error Suggestion Not a problem Next edition

By default this page displays the errata for the latest version of the book. If you have a previous version, select it here:  

(To find out what version you have, look at the copyright page, a few pages in from the front of the book. If it says (say) 'Second Printing', then here it'll be P2.0. If there are interim PDF releases in that printing, they'll be 2.1, 2.2, and so on.)

PDF Paper Description Found in Fixed in
C

#42203: This seems to be a snippet from the original (b.12) codebreaker example.--Sean P. DeNigris

B13.0
28-Jan-10
0
#38571: It's hard to follow the provided code examples, in the sequence of numbered folders. How about a git repo for each of the main projects tha...more...
David Chelimsky says: That's actually in the plan Charlie, but not until the final release.
B3.0
27-Mar-09
20
#42181: _Getting the words right_ "We believe that most of the problems that software development teams face are communication problems, and so are...more...
David Chelimsky says: The rest of the problems! (it's a bit tongue in cheek)
B13.0
25-Jan-10
21
#41850: When viewing the PDF using Adobe 9.2.0 on Windows XP the equals signs within the code sample appear instead as what look to be bolded dashes. ...more...
B12.0
17-Dec-09
22

#37358: More syntax highlighting in the plain text scenarios.--bartz

B1.0
30-Jan-09
27
#37568: There is further project structure confusion on page 27. Unlike Unix, Windows itself does not commonly have a bin directory, although Ruby doe...more...
B1.0
06-Feb-09
29
#42182: _Hello Cucumber_ [...]add two directories named features and spec, and move the greeter_spec.rb file from the RSpec example into the hello/sp...more...
B13.0
25-Jan-10
31
#40301: "Iteration" not explained The term “iteration” is used very early on (first reference is p31 in b8_0) but not explained. There’s even an en...more...
B8.0
01-Aug-09
33
#41504: I would like more information on the higher-level project descriptions i.e. outcomes and feature sets, and how they fit in. Specifically, I w...more...
B11.0
17-Nov-09
34
#42113: Dropped the end of the 4th paragraph - "A - indicates a number match: one of the numbers in the guess is the same as one of the numbers in the...more...
B13.0
20-Jan-10
34
#42169: Looks like something is missing at the end of this paragraph: A - indicates a number match: one of the numbers in the guess is the same as ...more...
B13.0
24-Jan-10
34
#42183: Suggest reworking the first sentence to read as follows: 3.1 Introducing Codebreaker Codebreaker is a two-person logic game in which a playe...more...
B13.0
25-Jan-10
34
#42184: Suggest changing your example to make it really clear (or really difficult to confuse) that the '+' and '-' do not correspond to positions: ...more...
B13.0
25-Jan-10
34
#42196: 3.1 Introducing Codebreaker, 4th paragraph : For example, given a secret code … In B12, I made a wrong assumption about the black marker an...more...
B13.0
26-Jan-10
36
#42115: In the "Focus on the Role" section, the "Coh04" link Is being displayed in bright green. This is incredibly hard to read on the gray backgroun...more...
B13.0
20-Jan-10
40
#40762: Downloads of code on this page have #START, #END in them ie: #START:title_and_narrative Feature: code-breaker starts game As a code-b...more...
B9.0
17-Sep-09
42
#42116: In the fifth paragraph that begins "Inside the codebreaker directory", the feature file name should be "codebreaker_starts_game.feature" as I'...more...
B13.0
20-Jan-10
44
#42120: This is definitely nit-picking, but the feature's explanation text is not parallel. I think it would read better as follows: For each numbe...more...
B13.0
20-Jan-10
47
#42248: From the Scenario Outline on this page you can infer that the mark will always print the +'s before the -'s. But this fact is never explicitl...more...
B13.0
04-Feb-10
47
#42173: Here’s the whole feature with thirteen scenarios expressed in a mere twenty five lines (beginning with the Scenario Outline): Scenario Out...more...
B13.0
24-Jan-10
47
#42197: Scenarios: no matches | code | guess | mark | | 1234 | 5678 | | Isn’t 78 in contradiction with 3.1 page 34 second paragraph : the c...more...
B13.0
26-Jan-10
50

#42119: Second paragraph ends with "Here are the contents of the two files:" and there are no contents listed.--Craig Ritchie

B13.0
20-Jan-10
50
#42172: I am getting the following error after I put in the second feature of the Mastermind game and run cucumber. features/codebreaker_submits_...more...
David Chelimsky says: I'm not getting this error. Please report it to the cucumber google group: http://groups.google.com/group/cukes.
B13.0
24-Jan-10
51
#42198: Suggest to put the figure 4-1 back. Reason : as I tried running cb/04 (old code) on page 55, I was stuck with require errors and wanted to ...more...
B13.0
26-Jan-10
54
#42283: On page 54 of B13, the last line of the output of the example cucumber run from the page before is listed directly below the sidebar. Because...more...
B13.0
09-Feb-10
56
#40205: Wrong line number (minor problem!) uninitialized constant Codebreaker (NameError) ./06/features/step_definitions/codebreaker.rb:7:in `/^I...more...
B8.0
26-Jul-09
56
#42122: The second sentence of the "Then" section is problematic. BTW, the Existing Errata I am seeing doesn't seem to match the page I'm looking a...more...
B13.0
20-Jan-10
56
#42170: Then /^I should see "([^\"]*)" $/ do |message| should be Then /^I should see "([^\"]*)"$/ do |message| as is the downloaded code Note t...more...
David Chelimsky says: It is correct in the PDF. What PDF viewer are you using?
B13.0
24-Jan-10
60

#42117: #start (last but one line) is formatted green like a comment, but isn't a comment.--Pete Bevin

B13.0
20-Jan-10
60
#42175: I had to play with the $LOAD_PATH to get this command to work: spec spec/codebreaker/game_spec.rb --format nested Ubuntu: spec_helper.r...more...
David Chelimsky says: The current version of rspec, 1.3, add lib to the load path. Are you using an older version?
B13.0
24-Jan-10
61

#42118: Two lines with #start are formatted green like comments, but aren't comments.--Pete Bevin

B13.0
20-Jan-10
61
#42239: I had to change spec/spec_helper.rb to include the following to get the spec to run $LOAD_PATH << File.expand_path('../../codebreaker/lib',...more...
David Chelimsky says: The current version of rspec, 1.3, add lib to the load path. Are you using an older version?
B13.0
01-Feb-10
63
#42130: The example on this page is supposed to be demonstrating a red or failing spec, but the text is blue. Probably would be good to actually see ...more...
B13.0
21-Jan-10
63
#42132: The last paragraph of section 5.2 indicates that I should see a FAILED-1 on the third line of the output, but I am not seeing this. The reason...more...
B13.0
21-Jan-10
70
#42133: In the second clause of the second sentence of the paragraph that begins "The first call to let() defines...", "return" should be "returned": ...more...
B13.0
21-Jan-10
71
#42134: The instruction to "chmod 755 bin/codebreaker" only applies to *nix systems... unless there was an instruction that I missed for Windows users...more...
B13.0
21-Jan-10
75
#42123: Given /^the secret code is "([^\"]*)"$/ do |secret| game = Codebreaker::Game.new(output) game.start(secret) end should be Given /...more...
B13.0
20-Jan-10
78
#42226: in cb2/19/features/step_definitions/codebreaker_steps.rb, your When instantiates Game with a local variable (game = Codebreaker::Game.new(outp...more...
B13.0
01-Feb-10
79

#42135: Code snippet at top of page is missing the '@' symbol in front of output. --Sid Wood

David Chelimsky says: Take a look at p56 in beta 13. It shows an output() method that encapsulates the instance variable, so no @ is needed.
B13.0
22-Jan-10
79

#42144: Section 6.3, "What We've Learned" is empty. I'm pretty sure I learned something. :)--Paul Nelson

B13.0
22-Jan-10
79
#42163: When you introduce the game of Codebreaker you mention that "The code-maker, which will be played by the application we’re going to write, cre...more...
B13.0
23-Jan-10
81
#42145: The output from my spec command does not match what is listed. Using the command: spec spec --color --format nested My output is: ...more...
B13.0
22-Jan-10
83
#42149: The code example that comes after the paragraph that begins "The current implementation of guess always sends an empty string..." is incomplet...more...
B13.0
22-Jan-10
83
#42179: At some point in section 7.1 we need to update the start method by adding @secret = secret. I don't think you tell us that. I figured it out ...more...
B13.0
25-Jan-10
85
#42150: This is nit-picking again, but... To maintain symmetry and improve readability, I would swap your order of secret and guess (so that it par...more...
David Chelimsky says: This is very subjective. I actually prefer the way it is in the book because we're saying "if the first number in the guess is the first number in the secret .."
B13.0
22-Jan-10
87
#42151: Something is bothering me about the game.rb test cases. There is duplication in the line: game.start('1234') It appears in every test ca...more...
David Chelimsky says: I like your instinct, and might consider that if it weren't a teaching example. In an earlier version of the book there were some different codes and other beta readers expressed confusion about it :)
B13.0
22-Jan-10
87
#42152: In implementing the loop in the guess method, why did you opt for Array#map? map creates an (unnecessary) new array containing the values retu...more...
B13.0
22-Jan-10
90
#42249: "Learned" is misspelled as "leared" in the last sentence before section 7.4, a sentence that also incorrectly separates "meantime" into "mean ...more...
B13.0
04-Feb-10
92
#42250: You begin Chapter 8 with nearly the same Fowler quote that you began section 5.4 with, though they are different in their wording: 5.4 In ...more...
B13.0
04-Feb-10
96
#42155: In the game.rb code example at the end of the page, the marker for a change to the code is wrong: nothing was change on the line: @output.p...more...
David Chelimsky says: As the previous paragraph suggests, that line changes to pass the guess to the exact_match_count method.
B13.0
23-Jan-10
97
#42156: In the code snippet showing the method exact_match_count, there is a change marker on the line: if exact_match?(guess, index) Nothing ch...more...
B13.0
23-Jan-10
97
#42157: The last line of the page and the section has a typo: Run the specs and the should all pass. The second "the" should be "they": Run t...more...
B13.0
23-Jan-10
98
#42158: In the paragraph that begins "Briefly, what's happening is that..." The word "iteration" in the last sentence of the paragraph should be "iter...more...
B13.0
23-Jan-10
100

#42159: In the bullet points beneath "Extract Class", the slash should be removed from "as/is" in the third bullet point, yielding "as is".--Paul Nelson

B13.0
23-Jan-10
100
#42160: In the bullet points beneath "Extract Class", the fourth bullet point incorrectly suggests passing the guess parameter to Marker.new. We shoul...more...
B13.0
23-Jan-10
102

#42180: marker = Marker.new(@secret, guess)
should be updated to remove instance variable
marker = Marker.new(secret, guess)--E Asa Bour

David Chelimsky says: There is no local variable there - the @secret _is_ an instance variable.
B13.0
25-Jan-10
106

#42121: "documents it's responsibility" s/b "documents its responsibility"--Pete Bevin

B13.0
20-Jan-10
106
#42161: The sentence "It’s still responsible for sending a mark to the output, but it’s no longer rep- sonsible for calculating the mark" has a spelli...more...
B13.0
23-Jan-10
106
#42162: I like the fact that you removed duplicate test cases from game_spec.rb. However, the single guess test case is a little simplistic. Why not t...more...
B13.0
23-Jan-10
112
#39655: omit (juvenile) "(It’s nice to do this from time to time anyway—it helps their self-esteem.)" --we already *know* we have a heightened sense ...more...
B7.0
26-Jun-09
115

#42136: Fourth paragraph (including code snippet), fourth line, sentence beginning with "There is no long a" should be "There is no longer a".--Sid Wood

B13.0
22-Jan-10
115
#42140: "There is no long a 1 in the secret, so we move on to the 4 in the third position of the guess." should be "There is no longer a 1 in the s...more...
B13.0
22-Jan-10
116
#42164: Like I mentioned with your use of the map iterator method earlier, I really think the each iterator method is more appropriate in this case. T...more...
B13.0
23-Jan-10
118

#42244: "To be clear, this <<<is>>> not production code, and is not intended to be shipped."--Thibaut Courouble

B13.0
02-Feb-10
118

#42201: starting **poing** for continued development.--Sean P. DeNigris

B13.0
27-Jan-10
121
#39658: "Whether this is due to real understanding and value of Agile principles, or simply a marketing ruse, only time will tell." over "Whether this...more...
B7.0
26-Jun-09
135

#42191: behaviour should be behavior
--Asa Bour

David Chelimsky says: We use the British spelling for behaviour since it's in the title of the book.
B13.0
26-Jan-10
136

#42238: Second parapgrah: "…, as you should already have a decent feel for how to do go about it". The "how to do go about it" should be "how to do it"

B13.0
01-Feb-10
147
#42174: Maybe I missed the explanation somewhere in the book, but you mention that the "it" method accepts a string and an optional Hash along with th...more...
B13.0
24-Jan-10
149
#42168: In the RSpec examples earlier in the book, you pass a string parameter to "describe" that includes the pound/hash/number sign. Example: des...more...
B13.0
24-Jan-10
165
#41742: The paragraph "Outcome-based planning" ends with "and that that’s ok" which might be correct but the two "that" sound very strange and could i...more...
B12.0
07-Dec-09
167
#42243: - One goal BDD is getting the words right. + One goal of BDD is getting the words right. It occurs to me now that this might be a joke, bu...more...
B13.0
02-Feb-10
178

#42257: In Ruby, there are two values that are evaluate as false in a boolean expression.

Change "are evaluate" to "evaluate."--Asa Bour

B13.0
05-Feb-10
181
#38400: In the description of attach_file, there is all of a sudden the mention of "Photo". I took me a while to figure out how it relates to the form...more...
B2.0
19-Mar-09
188
#38801: Isn't a full page for a screenshot of the rails project tree a bit generous? Couldn't be represented as a diagram, and to keep it consistent w...more...
B3.0
09-Apr-09
207
#40847: The first code example in section 14.2 Method Stubs has misleading code highlighting. On line 6 of the code example: statement.generate.sh...more...
B9.0
22-Sep-09
221
#38649: To set up HTTP headers in Webrat, the text suggests the following: Given /^I'm browsing the site using Safari$/ do header "User-Agent" ,...more...
B3.0
31-Mar-09
225

#40947: Add some introductory/explanatory text to the example code in the "Yielding" subsection--Tim Uttormark

B10.0
07-Oct-09
227
#41788: This section indicates that a clarification will be made about the differences of using stub, mock and double to make a spec more clear, but I...more...
B12.0
11-Dec-09
234
#42199: Last paragraph : By default, the spec command only loads files ending with _spec.rb. As you’ll see later in this chapter, … you can configure ...more...
B13.0
26-Jan-10
240
#42200: Paragraph “Invoke With Options Stored in a File with –options” Suggestion : give also the short form of --options, which is uppercase -O. ...more...
B13.0
26-Jan-10
259

#42153: I didn't copy the example directly, but I adapted it to my own project and I found I needed to use 'def' instead of 'define_method' in my macros.--Adrian Mowat

B13.0
23-Jan-10
267

#42176: At page footer: langauges should be languages--João Vitor Lacerda Guimarães

B13.0
24-Jan-10
268

#39978: This chapter is lacking an official "What we've learned" section like the others.--Shannon -jj Behrens

B7.0
14-Jul-09
273
#42131: The sidebar states: "For example, if you want to use Japanese, the first 2 lines might look like this: # language: pt Ele Ãl’ portuguÃłs" ...more...
B13.0
21-Jan-10
273

#42212: It´s portuguese on the sidebar and it has some character-encoding related error. The phrase should be: Ele é português.--Lucas Prim

B13.0
29-Jan-10
276

#42177: There is an extra "about" in the last sentence of the second paragraph; "for now, let's talk about *about* the step keywords."--Sid Wood

B13.0
25-Jan-10
279
#42206: In Section 18.10, Organizing Features, second paragraph, last sentence, change from: "as described earlier in Section 19.5" to: "as described ...more...
B13.0
28-Jan-10
281
#39987: "In the above example, if we renamed the Movie class to Film, we’d have to change line 8 which uses the field id and line 13 which uses the fie...more...
B7.0
14-Jul-09
281

#42207: In Section 18.11, Tags, under heading "Tags to the rescue", in the last example, change from: "OR NOT tagged with bar" to: "OR NOT tagged with @bar".--Gregory P. Kundla

B13.0
28-Jan-10
285

#42137: Duplicate "to" in second paragraph in chapter "19.2 World":
In some cases it can be handy to [to] invoke ...

B13.0
22-Jan-10
286
#42124: In the paragraph that starts with "Cucumber makes it easy...". "Cucumber makes it easy for us to do this, but allowing us to invoke from wi...more...
B13.0
20-Jan-10
286

#42125: Same paragraph as above: "Cucumber makes it easy..."

"...four-step version above, we can can write a..."

There are two cans back to back.--Jeremy Wesselman

B13.0
20-Jan-10
291

#42126: There is a type on the Scenario title.

"three of a kind beast two pair"

should be

"three of a kind beats two pair"--Jeremy Wesselman

B13.0
20-Jan-10
291

#42202: Scenario: three of a kind ***beast*** two pair

Should be "beats"--Sean P. DeNigris

B13.0
27-Jan-10
292

#42127: In the middle of the first paragraph on the page:

"...and stores the cell vlues in a..."

should be

"...and stores the cell values in a..."--Jeremy Wesselman

B13.0
20-Jan-10
298

#39085: Is it really necessary to repeat every matcher for the "should_not" version? I think it just clutters up the chapter.--Scott Johnson

B4.0
04-May-09
300
#39771: rspec-rails ActiveRecord::Error mocking For outside-in view specs it would be useful to see how to mock ActiveRecord errors, for example I ...more...
B7.0
30-Jun-09
300
#42147: In section 20.2 (Setting up a Rails project), in the list of gems to install, it says: $ [sudo] gem install selenium-client --version 0.2...more...
B13.0
22-Jan-10
302

#42108: When explaining the output of script/generate cucumber there is no description for config/cucumber.yml. --Cory Foy

B13.0
19-Jan-10
303

#42105: Second para after "Bundling in vendor/gems" - "With that configration in place" should be "With that config*u*ration in place"--Cory Foy

B13.0
19-Jan-10
303
#42109: For the "Bundling in vendor/gems" and "Bundling in vendor/plugins" - what I forsee happening is someone relatively new to Rails reading the bo...more...
B13.0
19-Jan-10
303
#42114: Regarding the "Bundling in vendor/gems" section starting on p.303; Unpacking dependencies installs Nokogiri which will cause an error when run...more...
B13.0
20-Jan-10
305
#42106: Second sentence - "...use together to begin driving development from the outside." Thinking that should be "from the outside-in" since you say...more...
B13.0
19-Jan-10
310

#42039: script/generate cucumber - add the "--spork" unless on Windows?--Jeremy Chatfield

B12.0
10-Jan-10
318
#40121: The BD Rails: Rails Views chapter would benefit from describing how to mock/stub/place expectations on ActionView helpers, for example when us...more...
B8.0
21-Jul-09
319
#42185: "Once those additions and changes are in place, re-running our scenario shows us that we’ve got one step left:1" "Once those additions and ...more...
B13.0
25-Jan-10
320
#42084: Running script/cucumber --tag @focus (on Win32) results in: WARNING: C:/data/donp/NetBeansProjects/showtime/features/support/env.rb:18: cuc...more...
B12.0
15-Jan-10
320
#41894: script/cucumber -tag @focus fails with: Missing these required gems: database_cleaner >=0.2.3 I ran rake gems:install to no avail ...more...
B12.0
22-Dec-09
322
#42100: FYI, on MS Windows XP with ruby 1.8.6 (2008-08-11 patchlevel 287) [i386-mswin32], Time.now.strftime("%l") => "". I notice that the %l isn't do...more...
B12.0
18-Jan-10
327
#42284: Missing space: "By default, Rails’ TestUploadedFile uses the text/plainMIME type." Should be: "By default, Rails’ TestUploadedFile us...more...
B13.0
09-Feb-10
343
#40568: I'm not sure if the Rails Controller chapter is the best place for this (or even if this is the best mechanism to suggest) but I feel that som...more...
B8.0
26-Aug-09
345
#42285: "If anything behaves differently, it’s a pointer to an inadvertent external dependency that has crept it." Should be: "If anything behav...more...
B13.0
09-Feb-10
348
#41128: text from 348 to 351 needs breaking up with some headers. Its very easy to get lost in the example. I would suggest some sub headings like ...more...
B11.0
29-Oct-09
359
#42186: In the section "Extracting Partials for Organization", should the second paragraph's last sentence be changed to "... to rely on a recent_mess...more...
B13.0
25-Jan-10
367
#42222: The fourth paragraph below the section 24.5 header (including code samples), second line reads; "To see this in action, create a spec/helpers/...more...
B13.0
01-Feb-10
372
#40128: It seems that testing the "validates_uniqueness_of" model validation is a bit tricky. Blogs and forums I've found have a number of suggestions...more...
B8.0
21-Jul-09
378
#41616: 3rd line up from the bottom of the page should say: Now it fails with uninitialized constant FooController::AccessDenied At least that is ...more...
B11.0
24-Nov-09
378

#42223: last sentence on page reads; "Let's look *a* closer at each of the methods we used." --Sid Wood

B13.0
01-Feb-10
379
#40234: Just another point about keeping these three chapters on Rails MVC consistent: In the Rails controller section, the method's if clause was im...more...
B8.0
28-Jul-09
389
#41619: This page says: "Now all examples are passing..." but I'm still getting an error: "uninitialized constant Message::User (NameError)" Looking ...more...
B11.0
24-Nov-09
391
#41143: This change of messages_controller break loads of the tests. It's not at all obvious how to refactor the tests and controller in tandem to ach...more...
B11.0
31-Oct-09
395
#41956: It'd be great if you could add a note as to how to handle errors that are raised in Webrat/Cucumber. On 395, the example of implementing an "a...more...
B12.0
31-Dec-09
395

#41957: Addendum to #41956: The solution was found in features/support/env.rb which specifies the @allow-rescue tag.--Pete Nicholls

B12.0
31-Dec-09
410

#41726: current_user is not defined in the messages_controller context, thus the spec throwing an error. --Andrei Erdoss

B12.0
05-Dec-09