【问题标题】:JSHint thinks Jest functions are undefinedJSHint 认为 Jest 函数未定义
【发布时间】:2017-07-22 18:30:24
【问题描述】:

我在 WebStorm IDE 中有一个 node.js 项目,其中包含一个简单的 Jest 测试。 测试通过,但 JSHint 警告 'test' is not defined (w117)

这是我的测试代码:

const sum = require('./sum');

test('adds 1 + 2 to equal 3', () => {
    expect(sum(1,2)).toBe(3);
});

有没有办法让 JSHint 识别 Jest 函数?

【问题讨论】:

  • 您介意向我们展示您的代码吗?
  • 添加测试代码
  • 好的,你在哪里定义/要求/导入test
  • jest 在运行测试时会隐式执行此操作。类似于浏览器总是为你定义文档。

标签: javascript webstorm jshint jestjs


【解决方案1】:

JSHint 在每个文件的基础上工作,并且不会“看到”其他文件中定义的全局变量,除非它们被添加到“全局”列表中。这可以通过将相应的 cmets (/* global test*/) 添加到您的文件中来完成 - 请参阅 http://www.jshint.com/docs/,或者通过将您希望全局使用的变量/函数添加到 Preferences -> Languages & Frameworks -> Javascript -> Code Quality Tool -> JSHint -> Predefined (,separated) 中的“预定义”列表中来完成。如果您使用自己的.jshintrc使用配置文件选项已启用),请将其添加到那里的“globals”:

"globals": {
    "test": true
  } 

【讨论】:

    【解决方案2】:

    从您向我们展示的代码中,我们只能假设test() 是一个隐式声明的全局变量。

    此时我不知道这个方法属于哪个框架,但是如果你想让 JSHint 闭嘴,你必须以某种方式声明那个变量:

    import test from { 'somemodule'}
    //or
    var test = require('test');
    //or
    (function(test){
        test('foo', () => {
             expect(1).toBe(1);
        });
    })(test);    
    

    如果您知道自己在做什么,则可以通过以下方式之一禁用该警告:

    在您的项目文件夹或以上文件夹中配置 .jshintrc.json 文件:

    {
      "undef": false
    }
    

    或者您可以使用

    禁用该警告内联
    /*jshint -W117 */
    test('foo', () => { /* ... */})
    

    【讨论】:

      【解决方案3】:

      这也可能是由于缺少依赖项造成的。

      确保您已安装@types/jest

      npm install --save-dev @types/jest
      

      【讨论】:

        猜你喜欢
        • 2014-11-23
        • 2015-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-10
        • 2013-09-07
        • 2014-01-17
        • 2012-02-09
        相关资源
        最近更新 更多