smstw / sms-uni-dev

SMS universal development tools
0 stars 0 forks source link

前端 UNIT TEST #5

Open asika32764 opened 10 years ago

asika32764 commented 10 years ago

加裝 Symfony DomCrawler & BrowserKit

$crawler = $this->client->request('GET', '/');

$this->assertCount(1, $crawler->filter('h1:contains("Hello World!")'));
asika32764 commented 10 years ago

或者用 PHP Dom Parser 也可以 https://github.com/paquettg/php-html-parser

LeoOnTheEarth commented 10 years ago

BrowserKit 要自己寫一個 class 去 extends 他的 Client 才可以用 HTTP 爬網站 因為他的 doRequest 是空的 abstract function XD

可以改成用 Goutte 處理,他有包裝好這些東西 https://github.com/fabpot/Goutte

Goutte 包裝的 package 有這些

asika32764 commented 10 years ago

看起來不錯。

我原本也有打算只用 PHP DomParser 就好,可以用 css3 語法來 Test,不用額外學語法

$dom = new Dom($html);

$h1 = $dom->find('body h1.head');

$this->assertEquals('Hello World', trim($hi->innerText));

另外也有考慮過用 SimpleXML 搭配 Xpath

$xml = simple_xml_load_string($html);

$this->assertEquals('Hello World', (string) $xml->xpath('//h1'));

而 Symfony 的 CssSelector 也可以把 css3 selector 轉換成 xpath

不過不知道為什麼有些 html 頁面被 SimpleXML 吃的時候就是會錯誤

以上兩者的好處是可以用 css3 選擇器來測試

asika32764 commented 10 years ago

$crawler->filter() 好像也是 css3 語法

LeoOnTheEarth commented 10 years ago

simple_xml_load_string 可能會有 html encoding 的問題,這部分可能得用 mb_encoding 或是 iconv 解決,但...視處理 case 的狀況,有時候非常麻煩,以前我在爬日本網頁的時候常被這個搞死 XD

goutte 用的 guzzle 會處理掉 encoding 的問題,至少我在測以前的 case 的時候看起來沒什麼問題

CSSSelector 其實我用的經驗不多,但我想都夠用了,既然是要能被測試的 HTML,寫出來 HTML 也不應該難以被描述成 test case 才是,以後開發頁面的時候可以討論看看

LeoOnTheEarth commented 10 years ago

寫出來 HTML 也應該難以被描述成 test case 才是

寫出來 HTML 也不應該難以被描述成 test case 才是

修正一下

asika32764 commented 10 years ago

用一個 Windwalker 的預設鷹架就可以測試了

asika32764 commented 10 years ago

可以用這個 repo 來測試 https://github.com/smstw/devsite

asika32764 commented 10 years ago

好像忘了考慮 JS 的測試,這樣只能測試靜態頁面 (短期內也夠了啦)

bblurock commented 10 years ago

昨天上完 phpunit 的課,回家再看 Mocha

發現語法長得好像,閱讀功力大增!

老牌的 Jasmine http://jasmine.github.io/

jquery 的 QUnit http://qunitjs.com/

http://karma-runner.github.io/0.12/index.html

http://theintern.io/

asika32764 commented 10 years ago

Jasmine http://inspire.twgg.org/programming/javascript/item/463-jasmine-unittest.html

LeoOnTheEarth commented 10 years ago

先以測試靜態的頁面為主 使用看看 Goutte