рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдХреЛрдбрдХрд╡рд░реЗрдЬ

рдЗрд╕ рдиреЛрдЯ рдореЗрдВ, рдореИрдВ JS- рдХреЛрдб рдХреЗ рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдореЗрдВ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдБрдЧрд╛, js-test-driver рдЯреЗрд╕реНрдЯ рд░рдирдЯрд╛рдЗрдо рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрднрд╡, рдЗрд╕рдХреА рдХреЛрдб рдХрд╡рд░реЗрдЬ рдХреНрд╖рдорддрд╛рдУрдВ рдФрд░ рд╕рд╛рдБрдк рдХреЗ рд╕рд╛рде рд╣реЗрдЬрд╣реЙрдЧ рдХреЛ рдШреБрдорд╛ рджреЗрдирд╛, рдЕрд░реНрдерд╛рддреН js-test-driver рдФрд░ рд░рд┐рдкреЛрд░реНрдЯ рдЬрдирд░реЗрдЯрд░ рд╕реЗ рдХреЛрдб рдХрд╡рд░реЗрдЬ рдбреЗрдЯрд╛ PHP_CodeCoverage рдХрд╡рд░реЗрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдореИрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдФрд░ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреЛрдб рдХрд╡рд░реЗрдЬ рдкрд░ рдРрд╕реА рд░рд┐рдкреЛрд░реНрдЯ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИ ...



рдЗрд╕рд▓рд┐рдП, JS рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдЬреЗрдПрд╕-рдкрд░реАрдХреНрд╖рдг-рдЪрд╛рд▓рдХ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рд╡рд░рдг рдФрд░ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред рдХрд╛рд░рдг рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:



рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЖрдИрдбреАрдИ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧ-рдЗрди рдЕрдм рдЕрдХреНрд╖рдо рд╣реИ, рдЖрдк рдХрдВрд╕реЛрд▓ рд╕реЗ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреЛ "рд╕реНрдкрд░реНрд╢" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд░реНрд╡рд░ рдФрд░ рд░рдирдЯрд╛рдЗрдо рдХрдВрд╕реЛрд▓ рд╕реЗ рдЕрд▓рдЧ рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХрд┐рдХ рджреНрд╡рд╛рд░рд╛ "рдореИрдиреБрдЕрд▓ рдореЛрдб рдореЗрдВ" рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред



рдЪрд▓реЛ рд╡реНрдпрд╛рдкрд╛рд░ рдореЗрдВ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ



рдХреЛрдб рд╣рдо рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВрдЧреЗ



var greeter = function(toSay){ this.whatToSay = toSay; } greeter.prototype.say = function(sayBye){ if(sayBye == true) return "Goodbye " + this.whatToSay; else return "Hello " + this.whatToSay; }
      
      





рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ



 var testCase = new TestCase("Say"); testCase.prototype.testCase1 = function(){ var i = new greeter('test'); assertEquals("Hello test", i.say(false)); };
      
      





рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛



  \jstd \plugins coverage.jar code.js test.js conf jstestdriver.jar
      
      





рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди (YAML рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рджрд░реНрдЬ рдХрд░реЗрдВ)



 load: - code.js - test.js server: http://localhost:4224
      
      







рд╣рдо рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ



рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░реЗрдВ



 H:\jstd>java -jar jstestdriver.jar --port 4224
      
      





рд╣рдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ: 4224, рд╣рдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдорд╛рд╕реНрдЯрд░ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЯреЗрд╕реНрдЯ рд░рди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

UPD: рдЖрдк рдордирдорд╛рдиреА рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдЬреБрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рддреБрдо рднреА рдПрдХ рдФрд░ рдУрдПрд╕ рдХреЗ рддрд╣рдд рдПрдХ рджреВрд░рд╕реНрде рдорд╢реАрди рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрд┐рд╕реА рдмреНрд░рд╛рдЙрдЬрд░ рдХреЛ рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ == рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рдкреЗрдЬ рдЦреЛрд▓рдирд╛ (рдЬреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХрд╛ js-test-driver рд╕рд░реНрд╡рд░ рд╣реИ)





 H:\jstd>java -jar JsTestDriver.jar --config conf --tests all .. Total 2 tests (Passed: 2; Fails: 0; Errors: 0) (1,00 ms) Chrome 6.0.472.63 Windows: Run 1 tests (Passed: 1; Fails: 0; Errors 0) (1,00 ms) Safari 525.28.1 Windows: Run 1 tests (Passed: 1; Fails: 0; Errors 0) (1,00 ms)
      
      





рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдордиреЗ рдХреЗрд╡рд▓ 2 рдкрд░реАрдХреНрд╖рдг рдХрд┐рдПред рд╕рд╣рд┐рдд рдХреНрд░реЛрдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ - 1, рдФрд░ рдпрд╣ рд╕рдлрд╝рд╛рд░реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рднреА рд╕рдлрд▓ рд░рд╣рд╛ - 1 рднреА рдФрд░ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рднреАред рд╕рдм рдХреБрдЫ рдорд╣рд╛рди рд╣реИред



рдХреЛрдб рдХрд╡рд░реЗрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?



CodeCoverage рдПрдХ рдЕрд▓рдЧ рдкреНрд▓рдЧрдЗрди рджреНрд╡рд╛рд░рд╛ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ ред рдХрд╡рд░реЗрдЬ рдбреЗрдЯрд╛ рдХреЛ рдкрд░реАрдХреНрд╖рдг рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕реНрдерд┐рд░ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдРрд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЛ N% рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ), рдпрд╛ рдЗрд╕реЗ LCOV рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдЦрдХ genhtml рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрддреЗ рд╣реИрдВред Win32 рдкреЛрд░реНрдЯ рдХрд┐рдП рдЧрдП рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рддреНрд╡рд░рд┐рдд рдЦреЛрдЬ рдХрд╛рдо рдирд╣реАрдВ рдЖрдИ; рдореБрдЭреЗ рд╕рд╛рдЗрдЧрд╡рд┐рди рдпрд╛ рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдорд╢реАрди рдмрдврд╝рд╛рдиреЗ рдХрд╛ рдорди рдирд╣реАрдВ рд╣реИ ...



рдХреЛрдб рдХрд╡рд░реЗрдЬ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВ



рдкреНрд▓рдЧрдЗрди рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ (рдХреЙрдиреНрдлрд╝рд┐) рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВред



 load: - code.js - test.js server: http://localhost:4224 plugin: - name: "coverage" jar: "plugins/coverage.jar" module: "com.google.jstestdriver.coverage.CoverageModule"
      
      





рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВ



 H:\jstd>java -jar JsTestDriver.jar --config conf --tests all Safari: Runner reset. .Safari: Runner reset. Chrome: Runner reset. .Chrome: Runner reset. Total 2 tests (Passed: 2; Fails: 0; Errors: 0) (1,00 ms) Chrome 6.0.472.63 Windows: Run 1 tests (Passed: 1; Fails: 0; Errors 0) (1,00 ms) Safari 525.28.1 Windows: Run 1 tests (Passed: 1; Fails: 0; Errors 0) (0,00 ms) H:/jstd/code.js: 83.33333% covered H:/jstd/test.js: 100.0% covered
      
      





рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреЛрдб рдХрд╡рд░реЗрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛рдИ рджреА рд╣реИред рдРрд╕реА рд░рд┐рдкреЛрд░реНрдЯ рд╕реЗ рдХрд┐рд╕реА рднреА рдорд╛рдпрдиреЗ рдореЗрдВ рдмрд╣реБрдд рдХрдо рд╣реИред рдЖрдЗрдП рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВред



 H:\jstd>java -jar JsTestDriver.jar --config conf --tests all --testOutput ./out Safari: Runner reset. .Safari: Runner reset. Chrome: Runner reset. .Chrome: Runner reset. Total 2 tests (Passed: 2; Fails: 0; Errors: 0) (1,00 ms) Chrome 6.0.472.63 Windows: Run 1 tests (Passed: 1; Fails: 0; Errors 0) (1,00 ms) Safari 525.28.1 Windows: Run 1 tests (Passed: 1; Fails: 0; Errors 0) (1,00 ms)
      
      





рдЕрдм рдХрд╡рд░реЗрдЬ рдЬрд╛рдирдХрд╛рд░реА рдмрд┐рд▓реНрдХреБрд▓ рднреА рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреА рд╣реИ, рд▓реЗрдХрд┐рди LCOV рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХрд╡рд░реЗрдЬ рд╡рд╛рд▓реА рдПрдХ рдлрд╝рд╛рдЗрд▓ ./out рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред



LCOV рдкреНрд░рд╛рд░реВрдк



Js-test-Driver рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди lcov рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкреНрд░рд╛рд░реВрдк рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реИред



 SF:H:/jstd/code.js DA:1,2 DA:2,2 DA:5,2 DA:6,2 DA:7,0 DA:9,2 end_of_record SF:H:/jstd/test.js DA:1,2 DA:3,2 DA:4,2 DA:5,2 end_of_record
      
      





SF рд╡рд╣ рдлрд╛рдЗрд▓ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, DA рдХрд╡рд░реЗрдЬ рдбреЗрдЯрд╛ рд╣реИ (DA: рд╕реНрдЯреНрд░рд┐рдВрдЧ, рд╣рд╛рдЙ рдореЗрдиреА рдЯрд╛рдЗрдореНрд╕ рдкрд░рдлреЙрд░реНрдо рдХрд┐рдпрд╛)ред



рд╣рдо рдПрдХ рд╕реБрдВрджрд░ рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ: PHP_CodeCoverage



PHPUnit - PHP рдХреЗ рд▓рд┐рдП рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реВрдкрд░реЗрдЦрд╛, рдХреЛрдб рдХрд╡рд░реЗрдЬ рд░рд┐рдкреЛрд░реНрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред CodeCoverage рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рдФрд░ рдмрд╣реБрдд рдХрд░реАрдиреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ PHP_CodeCoverage_Driver рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХрдХреНрд╖рд╛рдПрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреНрдп рдШрдЯрдХреЛрдВ (рд░рд┐рдкреЛрд░реНрдЯ рдмрд┐рд▓реНрдбрд░ рд╕рд╣рд┐рдд) рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд╡рд░реЗрдЬ рдкрд░ рдбреЗрдЯрд╛ рдХреЗ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддреА рд╣реИрдВред



Xdebugред рд╡рд╣ рдХрд╡рд░реЗрдЬ рдбреЗрдЯрд╛ рдХреИрд╕реЗ рджреЗрддрд╛ рд╣реИ?



рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП ...



 <?php xdebug_start_code_coverage(); function a() { $x = 10; } $b = 30; var_dump(xdebug_get_code_coverage());
      
      





рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ ...



 array( 'Z:\home\test\www\test.php' => array( 4 => 1 8 => 1 10 => 1 ) );
      
      





рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╛рд░реВрдк рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИрдВ, рдЖрдк рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдбреНрд░рд╛рдЗрд╡рд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ

рдиреАрдЪреЗ рдПрдХ рдХрд╡рд░реЗрдЬ рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд╡рд░реЗрдЬ рдбреЗрдЯрд╛ рдХрд╡рд░реЗрдЬ рдореЗрдВ рд╣реИред рдлрд╝рд╛рдЗрд▓ред рд░рд┐рдкреЛрд░реНрдЯ CodeCoverageReport рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрдЧреАред



 <?php include('PHP/CodeCoverage.php'); include('PHP/CodeCoverage/Driver/Lcov.php'); include('PHP/CodeCoverage/Report/HTML.php'); // ./lcov_coverage.dat contains ine coverage report in LCOV format $coverage = new PHP_CodeCoverage(new PHP_CodeCoverage_Driver_Lcov('./coverage.dat')); $coverage->start('mytest'); $coverage->stop(); $writer = new PHP_CodeCoverage_Report_HTML(); $writer->process($coverage, 'CodeCoverageReport');
      
      





рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдЖрдк рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдг рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдХ рд╢рд╛рдЦрд╛ рдЧрд╛рдпрдм рд╣реИ рдФрд░ рдЗрд╕реЗ рддреБрд░рдВрдд рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╡рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред



All Articles