JSPECを使用したBDD / TDD-コードの複製を削除します
-
28-09-2019 - |
質問
この仕様でコードの複製を削除するためにリファクタリングするにはどうすればよいですか:
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つの異なるギブンを使用して、ログインするかログインしていないかを使用できます。
所属していません StackOverflow