Rails - RSpec - Diferença entre “let” e “let!”

Eu li o que oManual RSpec diz sobre a diferença, mas algumas coisas ainda são confusas. Todas as outras fontes, incluindo "O Livro RSpec", explicam apenas sobre "let", e "The Rails 3 Way" é tão confuso quanto o manual.

Eu entendo que "let" é avaliado apenas quando invocado e mantém o mesmo valor dentro de um escopo. Então, faz sentido que no primeiro exemplo nomanual o primeiro teste passa como o "let" é invocado apenas uma vez, e o segundo teste passa conforme o valor do primeiro teste (que foi avaliado uma vez no primeiro teste e tem o valor de 1).

Depois disso, desde "let!" avalia quando definido e, novamente, quando invocado, o teste não deve falhar como "count.should eq (1)" deve ser "count.should eq (2)"?

Qualquer ajuda seria apreciada.

questionAnswers(6)

yourAnswerToTheQuestion