javascript - 从 Controller 中测试 Ember.js 路由导航

标签 javascript ember.js

我正在尝试在我的 ember-cli 应用程序中编写一个测试,以测试特定的 Controller 操作是否会根据页面上的输入值将用户带到特定的路线。

这是我遇到的错误:

IndexController: the setTable action navigates to the tables route
    ✘ Died on test #1     at http://localhost:7357/assets/qunit.js:425
        at test (http://localhost:7357/assets/vendor.js:72425)
        at :29
        at http://localhost:7357/assets/vendor.js:54
        at http://localhost:7357/assets/test-loader.js:14: 'null' is not an object (evaluating 'target.transitionToRoute')

如果我在浏览器中尝试,这是我在控制台中得到的错误:

Error while loading route: undefined

我的路线已定义,这是我的路由器:

import Ember from 'ember';

var Router = Ember.Router.extend({
  location: AccelewaiterENV.locationType
});

Router.map(function() {
  this.route('table', { path: '/table/:table_id' });
});

export default Router;

这是我的测试:

import { test, moduleFor } from 'ember-qunit';

moduleFor('controller:index', 'IndexController', {
  // Specify the other units that are required for this test.
  // needs: ['controller:foo']
});

test('the setTable action navigates to the tables route', function() {
  var controller = this.subject();
  controller.set('tableNumber', 1);
  controller.send('setTable');
  ok(controller.get('currentPath') === '/table/1');
});

这是我的模板:

<div class="start">
  <div class="row">
    <div class="col-xs-12">

      {{input type="text"
        valueBinding="tableNumber"
        class="form-control input-lg"
        placeholder="Enter Table #"}}

      <button {{ action 'setTable' }}
         id="submit-table"
         class="btn btn-success">Ok</button>

    </div>
  </div>
</div>

这是我的 Controller :

import Ember from 'ember';

export default Ember.Controller.extend({
  tableNumber: null,

  actions: {
    setTable: function() {
      var tableNumber = this.get('tableNumber');
      console.log(this.transitionTo);
      this.transitionToRoute('table/' + tableNumber);
    }
  }
});

我还创建了一个表 Controller ,但它目前是空的。

非常感谢任何帮助!

最佳答案

transitionTo 仅存在于扩展 Ember.Route 的项目上。

对于扩展 Ember.Controller/Ember.ObjectController/Ember.ArrayController 的项目,应该使用 transitionToRoute

此外,currentPath 仅存在于 ApplicationController 上,并且在集成测试时。看起来您正在混合集成测试和单元测试。

举个例子:http://emberjs.jsbin.com/wipo/33/edit

关于javascript - 从 Controller 中测试 Ember.js 路由导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24845007/

相关文章:

javascript - Laravel-如果我将变量传递给 Controller ​​并保存在数据库中,如何在 javascript 中使用 switch case

javascript - 运行 jest 时设置环境变量

Javascript 替换所有包含 '[]' 的字符串不起作用

javascript - 响应式文本 -- 函数未使用 FitText 和 FlexSlider 进行初始化

javascript - Ember.js 和 jQuery 可排序。如何解决变形脚本

javascript - 如何将文本框值获取到 Button OnClick 函数中的参数?

javascript - ember 模板不会因属性变量更改而更新

javascript - Ember 正在打印 Hello World!两次

javascript - 如何检索 Ember.js 模型的所有属性

javascript - 为什么 Ember.js/EAK 会自动生成 ApplicationController 而不是使用我的显式 ApplicationController?