为什么在Ember CLI的某些功能中没有定义ic-ajax?

时间:2014-08-04 03:55:45

标签: ember-cli ic-ajax

原谅我的无知,但我无法在某些内部使用ic-ajax 功能。

具体来说,我希望得到这样的测试,但是对于Ember CLI: 例如http://coderberry.herokuapp.com/testing-your-ember-application#30

我可以在Ember.Object.Extend中调用ajax,在函数和对象定义之外调用,但不能在模块,测试或Ember.Route的模型函数中调用。

我是否误解了某些内容或我的应用中是否存在配置错误?

我已经发现在我可以做的功能中:

ajax = require('ic-ajax')['default'];
defineFixture = require('ic-ajax')['defineFixture'];

但我非常确定文件顶部的import应该有效。

我在Ember 0.40.0上遇到过这个问题(在我现有的应用程序和一个新应用程序中都有)。请参阅下面的详细信息,我发现它未定义。在函数外部设置var ajax = icAjaxRaw也不起作用。我有点松散,所以你在这方面给予的任何帮助都会很棒。

用户-test.js:

import ajax from 'ic-ajax';
import { raw as icAjaxRaw } from 'ic-ajax';
import { defineFixture as icAjaxDefineFixture } from 'ic-ajax';

debugger;

---> icAjaxDefineFixture在这里定义

module('Users', {
  setup: function() {

    App = startApp();
    debugger;

icAjaxDefineFixture - > UNDEFINED

  },
  teardown: function() {
    Ember.run(App, App.destroy);
  }
});

test("Sign in", function() {

icAjaxDefineFixture - > UNDEFINED

  expect(1);
  visit('/users/sign-in').then(function() {
    equal(find('form').length, 1, "Sign in page contains a form");
  });
});

Brocfile.js(我不认为新的ember-cli-ic-ajax插件实际上需要这些):

app.import('vendor/ic-ajax/dist/named-amd/main.js', {
  exports: {
    'ic-ajax': [
      'default',
      'defineFixture',
      'lookupFixture',
      'raw',
      'request',
    ]
  }
});

1 个答案:

答案 0 :(得分:3)

有同样的问题。原来这是一个Chrome调试器优化问题,请查看此博客文章http://johnkpaul.com/blog/2013/04/03/javascript-debugger-surprises/

  

在调试时,如果您尝试使用控制台中闭包作用域中的变量(实际上并未在源中使用),您会对ReferenceErrors感到惊讶。这是因为JavaScript调试器优化了代码的地狱,并且如果函数的词法环境未被使用,它们将从函数的词法环境中删除。

要在调试器中玩游戏,我只是在闭包内输入ajax;并且变量神奇地出现了。