Pergunta

Por exemplo, digamos que eu tenho um Question modelo, que tem os campos booleanos answered e closed. Como eu testaria o comportamento que uma pergunta should be read only when marked as answered Usando RSPEC? Parece que é o comportamento do modelo, mas não tenho certeza de como testá -lo melhor. Devo usar um filtro antes para esse comportamento e adicionar um erro dizendo que você não pode modificar uma pergunta respondida? Ou existe uma maneira melhor de fazer isso? Estou apenas aprendendo RSPEC e BDD.

Foi útil?

Solução

Depende de como você precisa funcionar, mas ...

describe Question do
  it "should be read only when marked as answered" do
    question = Question.new(:title => 'old title')
    question.answered = true
    question.save

    # this
    lambda {
      question.title = 'new title'
    }.should raise_error(ReadOnlyError)

    # or
    question.title = 'new title'
    question.save
    question.title.should == 'old title'

    # or
    quesiton.title = 'new title'
    question.save.should be_false
  end
end

Ou talvez você queira levantar o erro no SAVE? Ou talvez não haja erro e isso silenciosamente não altera o valor? Cabe a você como você deseja implementá -lo, mas a metodologia é a mesma.

  1. Configure seus objetos no estado em que você deseja especificá -los
  2. Verifique se seus objetos nesse estado fazem o que você espera

Portanto, configure uma pergunta respondida e veja se você pode alterar um dos seus dados. Se você não puder, então a especificação passou. Cabe a você como você deseja que o comportamento do seu modelo funcione. E o melhor do BDD é que você pensa nessa interface primeiro, já que você precisa usar uma API de objetos para especificá -la.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top