BDD / TDD с JSpec - устранение дублирования кода - PullRequest
1 голос
/ 18 июня 2010

Как мне сделать рефакторинг для удаления дублирования кода в этой спецификации:

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

1 Ответ

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

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

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

scannedData.shouldMatch "The Jacket", "2005"

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

Чтобы удалить дублирование независимо от того, вошли вы в систему или нет:

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

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

...