【问题标题】:Ember Test Helper producing false JSHint errorEmber 测试助手产生错误的 JSHint 错误
【发布时间】:2014-08-22 20:18:09
【问题描述】:

我创建了一个 Ember 测试助手,它可以正常工作并在 Ember qunit 测试中成功使用,但是每次 JSHint 运行它总是给我一个错误,说我的测试助手没有定义。

我还需要做些什么来注册我的测试助手吗?如果没有,有没有办法在 JSHint 中抑制这个错误?

这是我的 Ember 测试助手。它没有运行时错误,我的测试成功通过,我什至设置了一个断点并使用调试器单步执行,所以我知道 JSHint 错误是误报。

Ember.Test.registerHelper('hasText', function (app, selector, text) {
  ...
});

这是在 custom.js 帮助文件中定义的,该文件被导入到 Ember-cli 为我生成的 /tests/test-helper.js 文件中。

import resolver from './helpers/resolver';
import { setResolver } from 'ember-qunit';
import testing from './helpers/custom';

setResolver(resolver);

document.write('<div id="ember-testing-container"><div id="ember-testing"></div></div>');

我得到的错误是:

.../tests/acceptance/outages-test.js: line 20, col 11, 'hasText' is not defined.
.../tests/acceptance/outages-test.js: line 22, col 10, 'hasText' is not defined.

这是验收测试文件(第 20 和 22 行是靠近底部的两条“ok”行):

import Ember from 'ember';
import startApp from '../helpers/start-app';

var App;

module('Acceptance: Outages', {
  setup: function() {
    App = startApp();
  },
  teardown: function() {
    Ember.run(App, 'destroy');
  }
});

test('...', function() {
  visit('/'); 

  andThen(function() {
    if (route('index').get('controller.outages.content').length > 0) {
      ok(!hasText('.warning', 'No outages planned'), 'we have outages');
    } else { 
      ok(hasText('.warning', 'No outages planned'), 'we have no outages');
    }
  });
});

我不确定我还能做什么;我不希望这些错误继续污染我的 JSHint 输出。

已编辑以包含错误并测试它们正在发生的情况。

【问题讨论】:

  • 请提供准确的 JSHint 错误消息,包括包含报告的实际行的代码部分。
  • 我已经用错误消息和正在发生的测试更新了我的问题。

标签: javascript ember.js jshint


【解决方案1】:

我能够得到这个工作。

要注册在 Ember.Test 中注册的辅助函数,我还需要告诉 JSHint。为此,我将辅助函数添加到位于 /tests 根文件夹中的 .jshintrc 文件中的“predef”数组中。

{
  "predef" : [
    "hasText",
    ...
   ]
}

请注意,JSHint 将开始在与被检查的文件相同的目录中查找该文件。如果没有找到,它会将目录树向上移动一层,一直到文件系统根目录,因此如果任何中间文件夹中有任何 .jshintrc 文件,则将使用这些文件。

感谢 @torazaburo 为我指明正确的方向以使其正常工作。

【讨论】:

    【解决方案2】:

    JSHint 无法知道 hasText 已定义并且在 Ember.Test.registerHelper 的全局命名空间中。您可以做的最好的事情是/* global hasText */ 或等效项,例如将其添加到您的.jshintrc

    【讨论】:

    • 啊,是的,解决方案是在 /tests 文件夹中的 .jshintrc 文件中的 'predef' 数组中列出辅助函数。感谢您为我指明正确的方向。
    • 接受了这个答案,但在下面提供了一个正式的解决方案,其中包含更多细节。
    猜你喜欢
    • 2014-11-03
    • 2013-08-22
    • 2020-01-31
    • 2021-06-23
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多