O BDD adiciona um ciclo ao redor do ciclo TDD.
Então você começa com um comportamento e deixa isso conduzir seus testes, depois deixa os testes conduzirem o desenvolvimento. Idealmente, o BDD é conduzido por algum tipo de teste de aceitação, mas isso não é 100% necessário. Contanto que você tenha o comportamento esperado definido, você estará bem.
Então, digamos que você esteja escrevendo uma Página de Login.
Comece com o caminho feliz:
Given that I am on the login page
When I enter valid details
Then I should be logged into the site
And shown my default page
Essa sintaxe do tipo Dado-e-Quando-E-E-E é comum no desenvolvimento orientado pelo comportamento. Uma das vantagens disso é que ele pode ser lido (e, com treinamento, escrito) por não desenvolvedores - ou seja, seus stakeholders podem visualizar a lista de comportamentos que você definiu para a conclusão bem-sucedida de uma tarefa e ver se ela corresponde às expectativas muito antes de você lançar um produto incompleto.
Existe uma linguagem de script, conhecida como Gherkin, que se parece muito com a acima e permite que você escreva código de teste por trás das cláusulas desses comportamentos. Você deve procurar um tradutor baseado em Gherkin para sua estrutura de desenvolvimento usual. Isso está fora do escopo desta resposta.
Enfim, de volta ao comportamento. Seu aplicativo atual ainda não faz isso (se o faz, por que alguém está solicitando uma alteração?), Então você está reprovando neste teste, esteja usando um corredor de teste ou simplesmente testando manualmente.
Então agora é hora de mudar para o ciclo TDD para fornecer essa funcionalidade.
Esteja você escrevendo BDD ou não, seus testes deverão ter o nome de uma sintaxe comum. Uma das mais comuns é a sintaxe "should" que você descreveu.
Escreva um teste: ShouldAcceptValidDetails. Passe pelo ciclo Vermelho-Verde-Refatorador até ficar satisfeito. Agora passamos no teste de comportamento? Caso contrário, escreva outro teste: ShouldRedirectToUserDefaultPage. Refator vermelho-verde até você ficar feliz. Lave, enxágue, repita até cumprir os critérios estabelecidos no comportamento.
E então passamos para o próximo comportamento.
Given that I am on the login page
When I enter an incorrect password
Then I should be returned to the login page
And shown the error "Incorrect Password"
Agora você não deveria ter antecipado isso para passar seu comportamento anterior. Você deve falhar neste teste neste momento. Então volte ao seu ciclo TDD.
E assim por diante até você ter sua página.
Recomendo o The Rspec Book para aprender mais sobre o BDD e o TDD, mesmo que você não seja um desenvolvedor Ruby.