Typescript migration headaches
I had the pleasure of migrating an existing codebase from straight nodejs to Typescript. Here’s a few of the headaches/gotchas I ran into.
Extending from Error breaks things
The following custom error class resulted in an error complaining about
Mocha not picking up sub directories with –recursive
With a test structure like:
mocha --recursive test/**/*.spec.tswill only see mocha pickup tests in
app.spec.ts, despite the
--recursiveoption being set.
As ScottFreeCode points out the solution is to quote the glob to avoid having the shell interpret the **.
mocha --recursive "test/**/*.spec.ts"
Typescript compiler will not touch non-ts/js files
.jsonschemas to the
distdirectory. This instead needs to be done separately.
With only a few files to copy I ended up creating a simple bin script to copy the files before running
Sequelize unexpected token in map file error
A fairly common pattern to follow when using Sequelize is to load all model files defined in a particular directory, with code like:
Unexpected tokenwith Typescript when map file generation is turned on. Any code loading files should be modified to explicitly check the extension. In this case, we want to exclude any
*.map.jsfiles from being loaded.
More details can be found on this TypeScript github issue.
Cannot redeclare block-scoped variable
With a codebase split up amongst a number of files, Typescript instantly complained about
Cannot redeclare block-scoped variablewhenever attempting to load a local file.
The solution is to ensure each file exported every function/variable used in other files.
Run Rails tests on Gitlab CI with a Postgres database
Gitlab CI can be used to run rails tests on every push. It’s pretty straight forward to setup.
First create a
before_scriptinstalls everything we need to run the tests.
testjob creates the database and executes the tests.
Next, create a gitlab specific database config
config/database-gitlab.ymlto connect to the database setup earlier.
Now the tests will be run on each push!
Reading passwords from a file with Selenium IDE and SelBlock
Recently I found the need to have Selenium loop through a bunch of commands for different users, each with their own usernames and passwords.
Thankfully, it's fairly painless to setup using the SelBlock plugin for Selenium IDE.
Create a datafile:
If the file is saved in the same directory as the test script, you can use a relative path.
Loop through it and log the username:
- Older posts