Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (2) 1 [2]  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Новое тестовое задание
 
Опрос: Я выполнил бы это тестовое задание
менее чем за час [ 2 ]  [12,50%]
от часу до трех [ 5 ]  [31,25%]
три - семь часов [ 1 ]  [6,25%]
день [ 3 ]  [18,75%]
пару дней [ 1 ]  [6,25%]
больше чем пару дней [ 0 ]  [0,00%]
фиг знает, как его выполнять [ 1 ]  [6,25%]
не стал бы его выполнять [ 3 ]  [18,75%]
Всего голосов: 16
Гости не могут голосовать 
chee  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 11 месяцев, 6 дней
Карма: 40




Цитата (Oyeme @ 2.12.2015 - 11:35)
Phpunit устанавливается в пару минут.

Правда, то есть там не нужно создавать скилетоны и прочие вещи, можно запустить консольную команду и она сама подключит классы с тестированием? Если нет, то геморой все так же остался. Я помню как пытался его завести, не завел, потому что он требует слишком много настройки, плюс еще раньше шел через PEAR без альтернатив.


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Santehnick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Абориген
*****

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 231
Пользователь №: 26735
На форуме: 5 лет, 9 месяцев, 1 день
Карма: 15




Цитата
Только с тестированием БД я не до конца разобрался.

И не нужно. Юнит-тест предполагает, что тестируемый метод должен быть полностью изолирован от внешнего окружения. Если нет, это интеграционный тест, который затрагивает много юнитов.

Юнит тест должен быть максимально простым, мочим зависимости, вызываем метод, смотрим результат.

С интеграционными больше проблем, чем пользы. Падать будут постоянно, при каждом рефакторинге, найти причину сложно. Если будет много таких тестов, всё превратится в настоящий ужас и вскоре ты перестанешь их запускать, потому что "там опять что-то сломалось" и каждый прогон всех таких тестов занимает много времени smile.gif

То что сайт работает в сборе сможешь проверить потом с помощью функциональных тестов. Я их пишу только на критичный функционал, регистрация/вход/оплата.
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Razzwan  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Землянин
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 622
Пользователь №: 40774
На форуме: 1 год, 10 месяцев, 24 дня
Карма: 10




Цитата (chee @ 2.12.2015 - 21:11)
Правда, то есть там не нужно создавать скилетоны и прочие вещи, можно запустить консольную команду и она сама подключит классы с тестированием?
Без понятия, что значит "скилетоны".
Делаю так:
1. composer require-dev phpunit/phpunit 4.8.* (не обновился до php5.6)
2. composer update
3. создаю файл phpunit.xml
заготовка
<phpunit bootstrap="vendor/autoload.php">
<testsuite
name="all">
<directory>
./tests</directory>
</testsuite>
</phpunit>

4. создаю класс-тест при помощи PhpStorm
5. пишу тест

Написал вот хрень какую-то. Не могу понять, почему не хочет тянуть остальные ссылки. Вытягивает только с первого ресурса - и все (
Вот и сам говнокод
<?php

namespace Razzwan;

class ImagesHandler
{
/**
* Массив ссылок найденных на странице
*
@var array
*/

protected $links = [];

/**
* Домен с протоколом
*
@var bool|mixed
*/

protected $domain = false;

/**
* счетчик
*
@var Int
*/

protected $count;

/**
* Обрабатываемый ресурс
*
@var string
*/

protected $resource;

/**
* Сохраняет в $this->resource обрабатываемую страниц
*
@param $url - Url ресурса, который собираемся обработать
*
@return bool
*/

public function getResource($url)
{
$url = $this->makeUrl($url);

if(!$this->domain){
$this->domain = $this->getDomain($url);
}

$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
]);

if($this->resource = curl_exec($ch)){
return true;
}
return false;
}

/**
* Добавляем протокол
http://, если передан url без протокола
*
@param $url - Url либо с протоколом либо без
*
@return string
*/

public function makeUrl($url)
{
if(substr($url, 0, 7) == 'http://' || substr($url, 0, 8) == 'https://'){
return $url;
} else {
return'http://' . $url;
}
}


/**
* Ищет все ссылки с тегом href
*
@param $resource - страница
*
@return array
*/

public function findLinks($resource)
{
$match = [];
preg_match_all(
"/< *a *href *= *[\"|\'] *(.*?) *[\"|\']/is",
$resource,
$match
);

return $this->clearLinks(array_unique($match[1]), $this->domain);
}

/**
* Добавляет все ссылки в массив ссылок
*
@param $resource
*
@return array
*/

public function addLinks($resource)
{
$links = $this->findLinks($resource);
$this->links = array_merge($this->links, $links);
return $this->links = array_unique($this->links);
}

/**
* Выделяет и сохраняет домен вместе с протоколом
*
@param $url
*
@return bool|mixed
*/

public function getDomain($url)
{
if($this->domain){
return $this->domain;
}
$math = [];
preg_match("/https?:\/\/[0-9a-z\.]*/i", $url, $math);
return $this->domain = array_shift($math);
}

/**
* Очищает адреса от нежелательных символов
*
@param array $arr
*
@param $domain
*
@return array
*/

public function clearLinks(array $arr = [], $domain)
{
$links = [];
foreach($arr as $key => $val){
$links[$key] = trim(str_replace($domain, '', $val));
if(preg_match('/^http/', $links[$key]) || strlen($links[$key]) == 1){
unset($links[$key]);
}
}

return array_unique($links);
}

/**
* Вытягивает все ссылки с сайта
*
@param $url
*
@throws \Exception
*
@return array - массив всех найденных ссылок на сайте
*/

public function getAllLinks($url)
{
if($this->getResource($url)){
$this->addLinks($this->resource);
if($this->links[$this->count]){
$this->getAllLinks($this->domain . $this->links[$this->count]);
}
return $this->links;

} else {
throw new \Exception(
sprintf(
"Ресурс %s недоступен",
$this->resource
)
);

}
}

}



--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
inpost  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Помагите Здесь живу!!!
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 22694
Пользователь №: 20039
На форуме: 7 лет, 2 дня
Карма: 599




Razzwan
О парсере страницы и речи не было. wink.gif


--------------------
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Razzwan  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Землянин
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 622
Пользователь №: 40774
На форуме: 1 год, 10 месяцев, 24 дня
Карма: 10




Цитата (inpost @ 3.12.2015 - 06:47)
Razzwan
О парсере страницы и речи не было. 

Задание нужно было выполнить за день. Я уже не вложился. Решил теперь просто пробелы в знаниях ликвидировать. Хочу вытянуть все картинки со всех страниц.


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Dezigo  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Indiana Jones
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1001
Пользователь №: 5429
На форуме: 8 лет, 5 месяцев, 15 дней
Карма: 45




Займёт 2 часа точно, с unit testom.
В задании сказано с хоста, значит страницу не надо парсить, а просто url_/images
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
bestxp  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



орангутанг
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2004
Пользователь №: 36605
На форуме: 3 года, 9 месяцев, 21 день
Карма: 111




а как же ftp:// или ftps:// ? это тоже удаленный сервер =) и тоже легко качаеться =)

curl даже не нужен =) есть же file_get_content file_put_content
самая простая альтернатива)


--------------------
PMПисьмо на e-mail пользователюСайт пользователяICQ
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (2) 1 [2]  Ответ в темуСоздание новой темыСоздание опроса