Ember: 如何测试函数涉及为新路由设置变量

Ember: how to test a function involves setting variable for new route

我有这个代码:

this.transitionToRoute('question').then(function(newRoute) {
    newRoute.controller.set('name',name__ );}

在动作函数中 我尝试对其进行单元测试:

这就是我现在拥有的:

let ctrl = this.subject();

var calledTransitionToRoute = "";
ctrl.transitionToRoute = function(route) {
calledTransitionToRoute = route;
};
ctrl.send('routeToConfirm');
return wait().then(function() {
assert.equal(calledTransitionToRoute, 'question');
});

我只是不知道如何测试新路由是否接收到名称变量。 谁能帮帮我?

请检查一下。如果我理解正确的话,这应该可以满足您的要求:

被测对象:

import Controller from '@ember/controller';

export default Controller.extend({

  actions: {
    changeRoute() {
      this.transitionToRoute('bar').then((newRoute) => {
        newRoute.controller.set('name', "helloWorld" );
      });
    },
  }
});

控制器单元测试

import { moduleFor, test } from 'ember-qunit';
import { resolve } from 'rsvp';
import EmberObject from '@ember/object';
import wait from 'ember-test-helpers/wait';

moduleFor('controller:foo', 'Unit | Controller | foo', {
  // Specify the other units that are required for this test.
});

// Replace this with your real tests.
test('changeRoute action should change to correct route and set controller-name-prop', function(assert) {
  let controller = this.subject();

  const TestRoute = EmberObject.extend();
  const TestController = EmberObject.extend();

  let testRoute = TestRoute.create({ controller: TestController.create() })

  controller.transitionToRoute = function(newRoute) {
    assert.equal(newRoute, 'bar', 'transitionToRoute was called with correct route-name');
    return resolve(testRoute);
  }

  controller.send('changeRoute');

  assert.ok(controller);

  return wait().then(() => {
    assert.equal(testRoute.get('controller.name'), 'helloWorld', ' controller name was set');
  });

});