Использование @dataProvider в acceptance/functional тестах вместе с PhpBrowser/WebDriver

codeception
Теги: #<Tag:0x00007fedbc6b4ea8>

(Igor) #1

Доброго дня!
Коллеги, кто-нибудь решил проблему использования @dataProvider’ов в Codeception, если suite использует PhpBrowser или WebDriver? Интересно именно использование датапровайдеров в чистом виде.

Вот пример:

    /**
     * Demo test
     *
     * @param string  $url
     * @param FunctionalTester $I
     *
     * @dataProvider getUrl
     * @group demo
     */
    public function demoTest(FunctionalTester $I, $url)
    {
        $I->wantTo('check counters script for url = ' . $url);
        $I->amOnPage($url);
        $I->seeResponseCodeIs(200);
    }

    /**
     * data provider
     *
     * @return array
     */
    public function getUrl()
    {
        return [
            ['', ],
            ['section/', ],
        ];
    }

Результат запуска:

  1. Failed to demo test in Tests\Functional\Mobile\HttpStatusCest::demoTest (tests/functional/Mobile/HttpStatusCest.php)
    [PHPUnit_Framework_Exception] Object of class Codeception\Scenario could not be converted to string

Вот содержание конфига:

    class_name: FunctionalTester
    modules:
    enabled:
        - PhpBrowser
    config:
        PhpBrowser:
            url: 'https://m.чтоугодно.ru/'

Codeception version 2.1.2
Заранее благодарю за помощь!


(Alexey Solodkiy) #2

Вынесите FunctionalTester $I из метода в свойство.


(Igor) #3

Спасибо за ответ!
Но не могли бы вы привести пример?
Такой вариант я пробовал и до создания темы и после вашего ответа и у меня не выходит “каменная чаша”. :smile:
Вот как выглядит мой вариант вашего предложения:

    protected $functionalTester;

    public function _before(FunctionalTester $I)
    {
        $this->functionalTester = $I;
    }

    /**
     * Demo test
     *
     * @param        string $url
     * @dataProvider getUrl
     * @group        demo
     */
    public function demoTest($url)
    {
        $I = $this->functionalTester;
        $I->wantTo('check counters script for url = ' . $url);
        $I->amOnPage($url);
        $I->seeResponseCodeIs(200);
    }

    /**
     * data provider
     *
     * @return array
     */
    public function getUrl()
    {
        return [
            ['', ],
            ['section/', ],
        ];
    } 

А вот результат запуска:

[PHPUnit_Framework_Exception] Object of class FunctionalTester could not be converted to string

Если ваш вариант работает, буду благодарен за возможность посмотреть на реализацию.
Заранее спасибо!


(Ray Romanov) #4
public function demoTest($url)
    {
        $I = new FunctionalTester; //FunctionalTester($scenario)
        $I->wantTo('check counters script for url = ' . $url);
        $I->amOnPage($url);
        $I->seeResponseCodeIs(200);
    }

(Igor) #5

Спасибо за ответ!
И у вас такое работает? А Cest у вас расширяет FunctionalTester?
Сомневался, что это заработает, но попробовал. Вот результат:

Demo test (Tests\Functional\Mobile\HttpStatusCest::demoTest)
Scenario:
PHP Fatal error: Call to undefined method Tests\Functional\Mobile\HttpStatusCest::wantTo() in /home/…/tests/functional/Mobile/HttpStatusCest.php on line N

FATAL ERROR. TESTS NOT FINISHED.
Call to undefined method Tests\Functional\Mobile\HttpStatusCest::wantTo()

Поясните пожалуйста, как работает у вас?


(Alexey Solodkiy) #6

Боюсь что я поспешил с советом
dataProvider на данный момент не работает с acceptance тестами