The most obvious limitation of the AL Test Runner extension for VS Code has been that you need to run VS Code on the Docker host machine. That’s fine for us because we do all our development on local Docker containers but I’m aware that this isn’t everyone’s preferred process.
Local Repo and VS Code, Remote Docker Host
I guess if you’re not hosting the Docker container locally then you are hosting it on some remote server – maybe on your own hardware or maybe in Azure or another cloud. To get AL Test Runner working in this scenario you’d need the AL Test Runner PowerShell module imported on the host and PS Remoting enabled to execute PowerShell on the host from your local VS Code terminal.
This post isn’t about getting that working. It’s not supported yet – although I do have a pull request to review from a team that are using it like this (thanks Max).
Remote Development with VS Code
An alternative approach is to use remote development with VS Code. The files that you are working on and the Docker host are remote but you are using VS Code locally. Kind of like RemoteDesktop Apps – the benefit of running on a server and using its resources but with the experience of an app that is running locally.
Install Open SSH server on the remote machine, install some VS Code extensions (using an insider build of VS Code – for now) and connect over SSH to the machine. Some magic happens at the other end and a few spells, invocations and minutes later a VS Code Server is installed on the remote machine.
It allows you to work in a local VS Code window but access the file system of the server and execute commands on it. Install VS Code extensions and PowerShell modules as if you are working locally and they are installed on the remote.
It is smooth. Impressively so. You quickly forget that you aren’t just working with files and extensions on your local machine. This clip shows:
- Selecting a folder on the remote server from my recent history
- Connecting via SSH
- Entering the password for the remote account that I am authenticating as (a local account as my VM in Azure is not joined to a domain)
- Running all the tests in the project and working with VS Code as I would do locally
I still prefer actual local development, but I have to admit that this is pretty great.
AL Test Runner
I span up a remote development scenario out of curiosity but I also wanted to test how/if AL Test Runner would work. It works almost seamlessly. Almost. There is just a little stretch of exposing stitching – but it’s easy to work around.
Once you’ve opened a remote development window you’ll need to:
- Install the AL extension
- Install the AL Test Runner extension
- Install the navcontainerhelper PowerShell module (you can use install-module in the integrated terminal)
If you try to run tests you’ll find that it appears to hang indefinitely. Actually it has popped a window to enter the credentials to connect to the server with – but you can’t see it and it won’t continue until you dismiss the window.
If you’re interested in trying it the workaround for now is to manually edit the config.json file in the .altestrunner folder.
When you first install the extension you won’t have a config.json file. Running a test, any test is enough to create it. You’ll also notice that the command appears to hang in the terminal. You can kill that terminal once the file has been created.
Open config.json and enter the userName to authenticate with BC. Next you need to enter the securePassword (this is not your plain text password). You can get the secure password running the following in the terminal:
ConvertTo-SecureString 'your password' -AsPlainText -Force | ConvertFrom-SecureString
Copy the huge string from the output into the securePassword key of the config file. After that you should be good to go.
At some point I’ll also work on the ability to use remote PowerShell to execute tests on a remote Docker host from your local machine. After all, Max has already done most of the work for me 🙂