UnitTesting icon indicating copy to clipboard operation
UnitTesting copied to clipboard

Run tests for installed packages

Open Thom1729 opened this issue 7 years ago • 8 comments

Currently, UnitTesting cannot run tests that are inside installed packages.

This would allow package authors to verify that their tests run when the package is installed. End users could also more easily troubleshoot their installed packages.

This is mostly because it inherits the discover method of unittest.TestLoader, which uses the filesystem directly. We could reimplement discover in UnitTestingLoader to use the resource system instead. In principle, this should work for our use case, because every test suite that UnitTesting can find should be accessible as a resource.

There are also a couple of minor issues, such as the way that unittesting.json files are loaded.

I'm working on an implementation.

Thom1729 avatar Jan 10 '19 15:01 Thom1729

Thank for the initiative work.

randy3k avatar Jan 10 '19 15:01 randy3k

How would you feel about adding sublime_lib as a dependency? sublime_lib.ResourcePath would substantially simplify the implementation. (We could use other parts of it as well, but those would be separate PRs.)

Thom1729 avatar Jan 10 '19 19:01 Thom1729

Sure. As a note, we will also need to modify the bootstrap code for the CI services so sublime_lib is installed automatically.

randy3k avatar Jan 10 '19 20:01 randy3k

I'm new to the CI stuff, but shouldn't Package Control install all of the dependencies automatically?

It looks like there's some pre-ST3 code in there. I wonder if it could be simplified a bit to take advantage of new features like the builtin "Install Package Control" command.

Thom1729 avatar Jan 10 '19 22:01 Thom1729

Installation of Package Control is optional. If a user didn't install Package Control manually via bootstrap install_package_control, the script will download the current only dependency coverage from the github repo.

randy3k avatar Jan 10 '19 22:01 randy3k

Just to note that many packages don't include the tests in production packages delivered by Package Control. Package Control uses git to create the packages when installing. This allows developers to take advantage of the export-ignore rule in .gitattribute files (files and directories with the attribute export-ignore won’t be added to archive files. See http://git-scm.com/docs/gitattributes for details).

For example:

https://github.com/NeoVintageous/NeoVintageous/blob/master/.gitattributes

gerardroche avatar Jan 11 '19 15:01 gerardroche

Good point. In that case, I would expect UnitTesting to behave as it normally would for a package with no tests.

Is there a good tutorial somewhere on setting up this sort of CI on a local machine for testing?

Thom1729 avatar Jan 11 '19 15:01 Thom1729

I used Travis docker machine for testing.

randy3k avatar Jan 11 '19 18:01 randy3k