Domanda

Ad esempio, diciamo che ho a Question modello, che ha i campi booleani answered E closed.Come testerei il comportamento di un file Question should be read only when marked as answered utilizzando RSpec?Sembra che sia il comportamento del modello, ma non sono sicuro di come testarlo al meglio.Dovrei utilizzare un filtro precedente per questo comportamento e aggiungere un errore che dice che non è possibile modificare una domanda con risposta?O c'è un modo migliore per farlo?Sto imparando solo RSpec e BDD.

È stato utile?

Soluzione

dipende da come ti serve che funzioni, ma...

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

O forse vuoi che l'errore venga generato durante il salvataggio?O forse non c'è alcun errore e semplicemente non cambia silenziosamente il valore?Dipende da te come vuoi implementarlo, ma la metodologia è la stessa.

  1. Imposta i tuoi oggetti nello stato in cui desideri specificarli
  2. Assicurati che i tuoi oggetti in quello stato facciano quello che ti aspetti

Quindi imposta una domanda con risposta e poi vedi se riesci a modificarne uno i suoi dati.Se non puoi, significa che le specifiche sono passate.Dipende da te come vuoi che funzioni il comportamento del tuo modello.E la cosa bella di BDD è che pensi prima a questa interfaccia, dal momento che devi effettivamente utilizzare un'API di oggetti per specificarla.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top