Ember Test Helper产生错误的JSHint错误

时间:2014-08-22 20:18:09

标签: javascript ember.js jshint

我已经创建了一个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输出。

已编辑以包含错误并测试它们是否正在发生。

2 个答案:

答案 0 :(得分:3)

我能够让这个工作。

要注册使用Ember.Test注册的辅助函数,我还需要告诉JSHint它们。为此,我将助手功能添加到了预先设定的状态。数组位于/ tests根文件夹中的.jshintrc文件中。

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

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

感谢@torazaburo 指出我正确的方向让这个工作正常。

答案 1 :(得分:2)

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