简体   繁体   中英

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 string to number which shows that the approach is working to some extend.

However, I also get:

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

test/test.js:5
  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 describe or it ?
  2. is this is an instance of a broader class of situations and, if so, what would the latter be?

Third-party libraries usually need definition files, ie 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.

You can simply declare the flow describe , it variables.

/* @flow */
declare var describe: any;
declare var it: any;

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM