This chapter has been very long. We've written tests at multiple levels, from the high-level black-box feature (which isn't a test, strictly speaking) to the functional API specs, to the model-level specs for Todo::TodoList
. We could also have written functional and unit tests for our AngularJS code. Is this worth it? When does all this testing become too much?
The answer is not easy and will depend on the system under consideration. The benefits of BDD are the rigor and modularity that come from so many levels of specifications. However, there is a cost and the specs can start to get in the way. Also, as these specs grow in number, they can become difficult to maintain and actually start hindering efforts to change the code. This usually happens because not much time and effort are dedicated to the test code itself.
In my opinion, BDD is a valuable approach to software engineering but it isn't appropriate for most situations. Still, taking the outside-in approach...