Developing Discourse Plugins - Part 6 - Add acceptance tests

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 лайк

Install Chrome and then give it another try.

1 лайк

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!

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

1 лайк

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 лайка

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 ?

Я пытаюсь следовать этому руководству, но застрял уже в самом начале: я вообще не могу получить доступ к /qunit. (Это, похоже, также связано с Install Discourse on Ubuntu or Debian for Development, что в целом соответствует подходу, который я использую для развёртывания Discourse на локальной машине с целью изучения разработки, но именно это руководство стало причиной моей проблемы, поэтому я решил написать здесь.) При попытке открыть эту страницу я получаю ответ «Такой страницы не существует или она закрыта».

В контроллере маршрута /qunit (discourse/app/controllers/qunit_controller.rb at 166fe3bb34f99bd0baa613726486ce0f13c7a992 · discourse/discourse · GitHub) в комментарии перед методом указано, что он # используется только в тестах/разработке без ember-cli. Поэтому я попытался запустить экземпляр с помощью RAILS_ENV=test bundle exec rails server, но EmberCli.enabled? по-прежнему возвращает true.

Какой подход вы используете для запуска локального сервера разработки, чтобы можно было фактически получить доступ к /qunit (вероятно, это связано с отключением EmberCLI)? (Возможно, я упускаю что-то очевидное.)

2 лайка

Новый путь — /tests. Я обновлю исходный пост — спасибо!

4 лайка

Отлично, спасибо! Переходим к следующему препятствию:

Эта прямая ссылка на конкретный тест принятия выдает ошибку (с трассировкой стека):

Error: No tests matched the module "Acceptance: Purple Tentacle".

Действительно, при поиске в выпадающем списке “Module:” я не вижу ничего, что соответствовало бы “purple” или “Purple”. Неужели в системе появился новый компонент для регистрации плагинов или их тестов, который здесь отсутствует?

Если я ищу “purple” с помощью текстового поля “Filter:”, меня перенаправляет на следующий URL: http://localhost:4200/tests?filter=purple, где возникает другая ошибка:

Error: Could not find module `helpers/qunit-helpers` imported from `discourse/plugins//acceptance/purple-tentacle-test`
    at missingModule (http://localhost:4200/assets/vendor.js:259:11)

Есть ли у вас какие-либо идеи о том, что здесь может быть не на месте?

Кстати, использует ли URL /tests маршрут с универсальным шаблоном get "*url", to: 'permalinks#show' и, следовательно, Permalink.find_by_url для фактического разрешения? Если да, то на каком этапе инициализации Discourse отображение URL /tests загружается в базу данных?

@jlc, огромное спасибо за то, что протестировали наше руководство и держите нас в курсе. :meow_heart:

Я внес некоторые изменения в пример теста на принятие из первого поста, чтобы отразить новые подходы, которые мы используем для таких тестов. По сути, изменения касаются:

  • импортов и
  • использования константы needs внутри acceptance.

Это должно решить большинство проблем, которые вы упомянули. Вы также можете использовать некоторые из опций needs здесь:

Также будет очень полезно изучить весь файл qunit-helpers!

1 лайк