質問

この仕様でコードの複製を削除するためにリファクタリングするにはどうすればよいですか:

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
役に立ちましたか?

解決

BDDでは、アプリまたはクラスの動作を説明して、簡単に変更できるようにしたいと考えています。重複を除去すると、動作が不明瞭になる場合は、複製を削除しないでください。このコードは、書かれたものより10倍以上読み取られ、BDDシナリオとユニットレベルの例ではさらにIMEがさらに読み取られます。

とにかく複製を削除することにした場合は、読みやすいものに置き換えてください。私はjspecに精通していませんが、私は次のようなものを期待しています

scannedData.shouldMatch "The Jacket", "2005"

タイトルと年のすべての関連する結果がチェックされている場合。

ログインしているかどうかについては無関係な重複を削除するには:

コードをGivens(どのようにして到達したかは関係ないコンテキスト)、Whens(実際にテストしたいアプリを介したイベント)、およびThens(探している結果)に分離します。システムの機能と、ユーザーがWebページであろうとウィンドウであるかどうかではなく、それでできることを説明したいと考えています。それは問題ではないはずです。低レベルの呼び出しを下位レベルに置きます。

その後、2つの異なるギブンを使用して、ログインするかログインしていないかを使用できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top