How to test themes or theme components?

I found this topic about testing plugins (automatically), but haven’t come across any mentioning how to test themes or theme components. Are there any examples of how to use QUnit (or similar) with themes?

「いいね!」 2

You can add it to a user selectable theme or use the test link on the theme admin page.

Sorry, I meant automated testing – I will amend my previous post. I was thinking of something like QUnit that some plugins already use.

「いいね!」 4

No, it’s not possible to add QUnit tests to themes/components at the moment…

@david how possible would it be possible to add support for a /test folder like plugins? we’d also have to enable the theme when the tests are run because the core tests run without any theme, right?

「いいね!」 9

Certainly possible, but will need some work. Right now all the theme javascript files are bundled together into one file. We would need to make sure tests are put in a new, separate bundle, so that they don’t get served to regular visitors. And then once that’s done, make a way to run qunit tests for a single theme.

The other thing to consider is that we don’t make the /qunit route available on production servers. Since themes are often developed on production servers, we may need to rethink this :thinking:

「いいね!」 10

This is one of the major downsides of theme components in my opinion. They are super easy to deploy which is fantastic, but testing often gets put aside.

「いいね!」 10

If I understand correctly, anything that can be done with a theme component can be done with a plugin. The former is easier to deploy, while the latter allows testing.

「いいね!」 2

Yes that is generally accurate. It ends up being a trade off in terms of what you are customising. For example adding a custom stylesheet probably couldn’t be tested even in a plugin. Adding custom javascript controls and widgets is where things become questionable.

「いいね!」 6

I feel like we should consider this issue when we do the ember cli work. There is nothing impossible about having some sort of test runner for themes, and we could ship some of the basics in the discourse-theme gem to set up local testing using ember cli.

「いいね!」 8

Running theme tests would require a full installation of Discourse though, right? There are so many interdependencies I don’t think we could test themes independently :thinking:

Maybe the theme-cli could have some logic to pull the discourse_dev docker image and run qunit tests inside that?

「いいね!」 2

The whole idea with ember cli is that we are cleanly splitting server from client. We could ship enough of the JS side of things to test the client without running a rails server. You would still need node and ember cli installed for sure, but you may get away without installing a full Discourse stack including Redis and Postgres.

「いいね!」 6

It might be tricky but something we can definitely keep in mind.

「いいね!」 5

テーマでのテストをサポートするようになりました(2021年半ばにテーマテストのサポートが追加されました)。ローカル環境または本番サイトの /theme-qunit にアクセスすると、テストが含まれるインストール済みのテーマ/コンポーネントが一覧表示されます。例については、Discourse Tab Bar for Mobile または Tag icons component を参照してください。

「いいね!」 6

素晴らしいですね。これはプラグインのJavaScriptのテストにも拡張されますか?

「いいね!」 3

本番環境でテストを実行できるということですか?現時点ではテーマのみです。

(ローカルでは、もちろんプラグインのJSテストを実行できます。)

「いいね!」 1

CIで、現在specs(Theme.およびPlugin JS)で実行できるのと同様に、それらを実行できるようにすることが目標だと思いますか?

「いいね!」 2

はい、すべての公式プラグインでCIでテストを実行しています。

「いいね!」 1