Desenvolvendo Plugins de Discourse - Parte 6 - Adicionar testes de aceitação

LOAD_PLUGINS=1 QUNIT_SKIP_CORE=1 QUNIT_SINGLE_PLUGIN='discouse-humble-box' /home/ravenstorm/.rbenv/versions/2.5.3/bin/rake qunit:test
Chrome is not installed. Download from https://www.google.com/chrome/browser/desktop/index.html
rake aborted!
Command failed with status (1): [LOAD_PLUGINS=1 QUNIT_SKIP_CORE=1 QUNIT_SIN...]
/home/ravenstorm/discourse/lib/tasks/plugin.rake:117:in `block in <main>'
Tasks: TOP => plugin:qunit
1 curtida

Install Chrome and then give it another try.

1 curtida

Oh sorry i’ve pasted an old error code which i had stored in a pastebin :frowning_face:

navigate to http://localhost:60099/qunit?qunit_single_plugin=discouse-humble-box&qunit_skip_core=1&seed=187998423095278311109560784485973475676
Tests timed out
rake aborted!
Command failed with status (124): [node /home/ravenstorm/discourse/vendor/ass...]
/home/ravenstorm/discourse/lib/tasks/qunit.rake:89:in `block in <main>'
Tasks: TOP => qunit:test
(See full trace by running task with --trace)
rake aborted!
Command failed with status (1): [LOAD_PLUGINS=1 QUNIT_SKIP_CORE=1 QUNIT_SIN...]
/home/ravenstorm/discourse/lib/tasks/plugin.rake:117:in `block in <main>'
Tasks: TOP => plugin:qunit

Try running the test in the browser as David suggested earlier. So, in your browser, when the server is running, go to your-local-site/qunit. Very often, for me, timeouts in the Terminal have errors in JS that I could see and fix after visiting /qunit on the browser.

Thats one of the problems :smiley:

I can’t find acceptance tests on my /qunit

Even after turning on all modules and filtering it with box and humble nothing is here :slightly_frowning_face:

Try renaming the folder to test/javascripts/acceptance - that extra s is quite important!

https://github.com/discourse/discourse/blob/cd0403174dd88b0d1619ee7a53b42bc600bd69d1/lib/plugin/instance.rb#L463

You might need to do rm -rf tmp, and then restart your development server for the changes to take effect.

1 curtida

Do what David said above (rename the folder to javascripts), but ALSO, change the name of your plugin in plugin.rb to discourse-humble-box to match the folder name. I did these two changes, and I see tests locally:

4 curtidas

Yea i’ve seen those as well now, but these aren’t really eye-opening results tbh.

But gotta dig deeper and lookup why these errors are shown.

Thanks for the help guys.
For example the second test case… if i am testing it myself by hand… it works, but running it on qunit it fails :frowning:

Ok, got a brief idea whats bringing me the errors and it confuses me:
http://localhost:9292/ in my browser has the plugin installed and working
http://localhost:9292/qunit the test shows, that the plugin is not even installed

I thought these two are using the same enviroment ?
Could this be caused by my local dev-enviroment since it’s not using docker and I’m not able to install the plugin like Install Plugins in Discourse ? It’s just sitting in the plugins folder like the others.

Any idea how this is possible ?

Estou tentando seguir este guia, mas estou preso logo no início: não consigo acessar /qunit de forma alguma. (Isso também parece relacionado a Install Discourse on Ubuntu or Debian for Development, que é basicamente a abordagem que estou usando para implantar o Discourse em minha máquina local para aprender sobre desenvolvimento, mas este guia é o que desencadeou meu obstáculo, então pensei em colocá-lo aqui.) Tentar acessá-lo retorna uma resposta “Essa página não existe ou é privada”.

O controller para a rota /qunit (discourse/app/controllers/qunit_controller.rb at 166fe3bb34f99bd0baa613726486ce0f13c7a992 · discourse/discourse · GitHub) menciona que é # apenas usado em testes / desenvolvimento não-ember-cli (o comentário antes desse método), então tentei executar a instância com RAILS_ENV=test bundle exec rails server, mas EmberCli.enabled? ainda é true.

Qual abordagem vocês estão usando para executar um servidor de desenvolvimento local para que possamos realmente acessar /qunit (o que provavelmente envolve desabilitar o EmberCLI)? (Certamente posso estar perdendo algo óbvio.)

2 curtidas

O novo caminho é /tests. Atualizarei o OP - obrigado!

4 curtidas

Ótimo, obrigado! Próximo obstáculo:

Este link direto para o teste de aceitação específico gera o erro (com um backtrace):

Erro: Nenhum teste correspondeu ao módulo "Acceptance: Purple Tentacle".

De fato, quando procuro na lista suspensa “Módulo:”, não vejo nada que corresponda a “purple” ou “Purple”. Existe uma nova parte no sistema para registrar plugins ou seus testes que pode estar faltando aqui?

Se eu procurar por “purple” usando a caixa de texto “Filtrar:”, ele me leva ao seguinte URL: http://localhost:4200/tests?filter=purple, que me dá um erro diferente:

Erro: Não foi possível encontrar o módulo `helpers/qunit-helpers` importado de `discourse/plugins//acceptance/purple-tentacle-test`
    at missingModule (http://localhost:4200/assets/vendor.js:259:11)

Você tem alguma ideia do que pode estar fora do lugar aqui?

Como observação lateral, o URL /tests usa a rota genérica get "*url", to: 'permalinks#show' e, portanto, Permalink.find_by_url para realmente resolver? Se sim, em que ponto da inicialização do Discourse o mapeamento do URL /tests é carregado no banco de dados?

@jlc, muito obrigado por experimentar nosso guia e nos manter atualizados. :meow_heart:

Fiz algumas alterações no teste de aceitação de exemplo do OP para refletir algumas novas alterações que estamos usando para testes de aceitação. Essencialmente, as duas alterações são

  • importações e
  • o uso da constante needs dentro de acceptance

Isso deve resolver a maioria dos problemas que você mencionou. Você também pode usar algumas das opções de needs aqui:

Analisar todo o arquivo qunit-helpers também seria muito útil!

1 curtida