2010-06-18 2 views
1

Как я рефакторинг для удаления дублирования кода в этой спецификации:BDD/TDD с JSpec - Удаление дублирования кода

describe 'TestPlugins' 
    describe '.MovieScanner(document)' 
     before_each 
      MoviePage_loggedIn = fixture("movie_logged_in.html")    // Get logged-in movie page 
      MoviePage_notloggedIn = fixture("movie_not_logged_in.html")  // Get non logged-in movie page 
      scanner = new MovieScanner()            // Get movie scanner 
     end 

     it 'should scan logged-in movie page for movie data' 
      doc = MoviePage_loggedIn   // Get document to scan 

      // Unit Tests 
      // ------------------------------------------------------------ 

      // Test movie scanner's functions 
      scanner.getMovieTitle(doc).should.eql "The Jacket" 
      scanner.getMovieYear(doc).should.eql "2005" 

      // Test movie scanner's main scan function 
      scannedData = scanner.scan(doc) 
      scannedData.title.should.eql "The Jacket" 
      scannedData.year.should.eql "2005" 
     end 

     it 'should scan non logged-in movie page for movie data' 
      doc = MoviePage_notloggedIn  // Get document to scan 

      // Unit Tests 
      // ------------------------------------------------------------ 

      // Test movie scanner's functions 
      scanner.getMovieTitle(doc).should.eql "The Jacket" 
      scanner.getMovieYear(doc).should.eql "2005" 

      // Test movie scanner's main scan function 
      scannedData = scanner.scan(doc) 
      scannedData.title.should.eql "The Jacket" 
      scannedData.year.should.eql "2005" 
     end 
    end 
end 

ответ

0

В BDD, мы хотим описать поведение нашего приложения или классов, чтобы сделать их легко изменить. Если удаление дублирования также заслонит поведение, не удаляйте дублирование. Код считывается в 10 раз больше, чем написано, а IME - еще больше для сценариев BDD и примеров уровня.

Если вы все равно решите удалить дублирование, замените его на что-то читаемое. Я не знаком с JSpec, но я бы ожидать, что-то вроде

scannedData.shouldMatch "The Jacket", "2005" 

где все соответствующие результаты по названию и год проверяются.

Чтобы удалить ненужное дублирование вошедших ли вы или нет:

Отделить код в Гивенсе (контекст, в котором он не имеет значения, как вы туда попали), Whens (события с помощью приложения, поведение которых вы на самом деле хотите проверить) и Thens (результаты, которые вы ищете). Вы хотите описать возможности системы и вещи, которые пользователь может сделать с ней, а не веб-страницу или окно - это не имеет значения. Поместите вызовы более низкого уровня на более низкий уровень.

У вас может быть два разных givens - вход в систему или вход в систему - и повторное использование остальных шагов для остальных.

+0

Спасибо за ваш ответ! Я имел в виду, как мне объединить тесты как для зарегистрированных, так и для незарегистрированных страниц, чтобы один и тот же код тестирования не дублировался во всех тестах? – Chetan

+0

Отредактировано. Надеюсь, поможет! – Lunivore

Смежные вопросы