Marcus Junius Brutus Marcus Junius Brutus - 1 year ago 184
Javascript Question

using flowtype to statically check mocha test code

I have some complex Mocha code which I would like to statically check with FlowType because why not?

Below is a minimal repro:

/* @flow */

describe('it', function () {
it('fails', function() {
const s: number = 'flow spots this error';

When I run Flow on this, Flow does indeed spot the problem with the assignment of
which shows that the approach is working to some extend.

However, I also get:

4: describe('it', function () {
^^^^^^^^ identifier `describe`. Could not resolve name

5: it('fails', function() {
^^ identifier `it`. Could not resolve name

… apparently the Mocha test definitions run in an environment where these functions are globally available but looking at the test file there's nothing that would allow Flow to detect that.

I am not sure these problems are specific to Mocha but I don't feel I can confidently frame the question in broader terms, so my questions are:

  1. how can I have Flow type check Mocha test code without suppressing every line that contains

  2. is this is an instance of a broader class of situations and, if so, what would the latter be?

Answer Source

Third-party libraries usually need definition files, i.e. files containing all the type information for a given library.

In this case, you need a definition file for mocha, which fortunately is provided by flow-typed.

Install it with

npm install -g flow-typed

then run

flow-typed install 

It will automatically install all the available definition files for your dependencies, including mocha.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download