yiisoft / yii2-gii

Yii 2 Gii Extension
http://www.yiiframework.com
BSD 3-Clause "New" or "Revised" License
202 stars 192 forks source link

Gii generete funcional case tests #120

Open lukBarros opened 8 years ago

lukBarros commented 8 years ago

Hi mans! That good end year?

The GII powered fantastic for every cases, by prototipations, by scaffolding, by simples cruds massive in the long projects, by generete finale code...

If the codeeception avaliable, GII have generate funcional tests? or unit Test for AR model? Its is one generetor for scaffolding testing scope, option in the screem on model generetor (unit test) or crud (feature test) and orther tips.

What do you think of this? Perhaps this skunk inspired me a lot!

cebe commented 8 years ago

can you give more concrete example of what should be generated based on which input?

lukBarros commented 8 years ago

@cebe case:

Case generete one crud, based in one model, this output include the class 'crud_name_xxx_test' type featuring test, in the sequence, access list and check some elements with create buttom ou grid from data AR. Test if click in the new register buttom redirect to form, and in the form exists fields basics do AR....

This is util, I'm using gii this is on 'hand on road' for generete basic cruds

lukBarros commented 8 years ago

@cebe tink about it?

sdlins commented 8 years ago

Olá @lukBarros,

Se você estiver se referindo a gerar testes para as operações de CRUD, isto não deveria ser necessário visto que o ActiveRecord já possui seus testes para verificar o banco e as classes Schema também já possuem testes (até onde sei). O que o CRUD faz é gerar os campos baseados em Schemas e preparar a estrutura para salvar os dados (baseado em ActiveRecord). Portanto, podemos dizer que, implicitamente, já existem testes.

Criar testes para (re)verificar isso talvez se tornasse bem redundante.

lukBarros commented 8 years ago

@slinstj isso é fato, me parece correto a afirmação de redundancia. Mas, porém por exemplo, um teste de aceitação (navegação UI) não é coberto pelos tests por exemplo, e quando se mudar o crud depois de gerado eles quebram claro, e aí já tem o ponto de onde tem o test gerado para resolver até passar.

Isso pode ser uma mão na roda para cultura do teste de soft.

Pense em não só testes de unidade, mas de funcionalidade, de aceitação por exemplo.

sdlins commented 8 years ago

Acceptance/functional testing is a very specific per app testing. There's no an useful general test standard. Additionally, how would you manage the webdriver (selenium, etc) dependency?

Unit testing generation is just a codecept cli command far.

I can't see a valid use case. It is up to a core developer.

lukBarros commented 8 years ago

Acceptance Testing and Functional Are Possible with Yii2 yes!

Yii2 behind a code suite codeception in the core component :

https://github.com/yiisoft/yii2-codeception

With codeception you can do something like acceptance test without using a recorded solution via webdrive and interaction via UI. Just encode it in the form of written test.

For more information codeception : http://codeception.com/

sdlins commented 8 years ago

Acceptance Testing and Functional Are Possible with Yii2 yes!

When have I said it isn't?

With codeception you can do something like acceptance test without using a recorded solution via webdrive and interaction via UI. Just encode it in the form of written test.

Yeah, this is what the acceptance are meant to do.

You should read my message again, if you want.

lukBarros commented 8 years ago

Excuse me!

My English is basic , I get it wrong .

I did not understand exactly what you wanted to talk.

sdlins commented 8 years ago

Tranquilo, te explico depois, com mais tempo.

sdlins commented 8 years ago

Eu disse que testes de aceitação ou funcionais são muito específicos para cada applicação. Não existe um padrão, mesmo que genérico, que sirva pra todas as aplicações. E ainda que se inventasse um, você teria a dependência de um webdriver, que é necessário para rodar testes de aceitação, ou seja, seria necessário ou instalar o Selenium Server (que é java) ou usar o PhantonJs browser.

Quanto aos testes unit, são tão fáceis de gerar quanto usar um simples comando no cli. O próprio codeception tem seu generate:test.

Em suma é isso. Mas claro, cabe aos desenvolvedores yii decidir se sua ideia deve ou não ser implementada (ou você mesmo fechar o issue). :+1:

lukBarros commented 8 years ago

Tudo bem entendi. Mas o que quero dizer é um teste funcional para o crud gerado, ou seja, crud gerado, rodou testes passam todos, mas se por exemplo o cara tirar 1 campo do form ou mudar o layout de botões quebra o teste, isso implementa uma cultura de testes, pré gerados juntos com o gii.

Realmente agora entendi o que você falou e tem sentido. Mas o Selenium pode ser em parte subistituido por exemplo pelo codeeception com seu teste de aceitação, veja no link um exemplo, esse:

http://codeception.com/docs/03-AcceptanceTests

Olhe o exemplo:

<?php $I->amOnPage('/login'); $I->fillField('username', 'davert'); $I->fillField('password', 'qwerty'); $I->click('LOGIN'); $I->see('Welcome, Davert!');

Yii aponta que terá suporte e forma definida de implementar e executar isso, já está sendo documentado em:

https://github.com/yiisoft/yii2-app-basic/blob/master/tests/README.md

sdlins commented 8 years ago

De: http://codeception.com/docs/03-AcceptanceTests

This scenario can be performed either by a simple PHP Browser or by a browser with Selenium WebDriver. We will start writing our first acceptance tests with a PhpBrowser.

Codeception depende de um webdriver. Se usar o phpbrowser, javascritp e ajax não funcionam, então você estará bem limitado e não conseguirá fazer nem mesmo testes simples de aceitação.