Как убрать дублирование из RSpec - PullRequest
0 голосов
/ 22 марта 2010

контекст "ответ правильный" сделать

before(:each) do
  @answer = stub_model(Answer, :correct => true).as_new_record
  assigns[:answer] = @answer

  render "answers/summarize"
end

it "should display flashcard context properly" do
  response.should contain("Quiz")
end

it "should summarize results" do
  response.should contain("is correct")
end

конец

контекст "ответ неправильный" сделать

before(:each) do
  @answer = stub_model(Answer, :correct => false).as_new_record
  assigns[:answer] = @answer

  render "answers/summarize"
end

it "should display flashcard context properly" do
  response.should contain("Quiz")
end

it "should summarize results" do
  response.should contain("is incorrect")
end

конец

Какизбежать повторения следующего блока в обоих вышеуказанных контекстах?

it "should display flashcard context properly" do

  response.should contain("Quiz")

end

Ответы [ 2 ]

0 голосов
/ 26 июня 2010

Если вы действительно хотите завершить некоторые из ваших тестов, вы можете сделать это так:

def answer_tests
  it "should display flashcard context properly" do
    response.should contain "Quiz"
  end

  it "should do be awesome" do
    response.should be_awesome
  end
end

context "answer is correct" do
  answer_tests

  it "should summarize results" do
    response.should contain "is correct"
  end
end

context "answer is incorrect" do
  answer_tests

  it "should summarize results" do
    response.should contain "is incorrect"
  end
end

Как видите, это действительно удобно, когда у вас есть более одного теста, который вы хотите заключить в метод.

0 голосов
/ 23 марта 2010

Ваши спецификации описывают поведение, которое вы ожидаете от своего кода - с таким количеством повторений все в порядке.

Если это выходит из-под контроля, используйте разные контексты, чтобы изолировать разные ожидания. Например, вы можете учесть эти повторяющиеся ожидания в новом контексте, который просто проверяет страницу независимо от того, какой ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...