如何使用qunit对ember-cli app中的路由进行单元测试?

Stu*_*rty 7 javascript unit-testing ember.js ember-cli

我似乎无法获得从单元测试触发的模型钩子和动作.

任何使用此ember-cli环境的样本/博客都将是一个很大的帮助!

我发现这个链接 什么样的单元测试解决方案在Ember.js的路线?

但是route.model()将错误抛出为:未定义transition.

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

moduleFor('route:sample', 'SampleRoute', {
  // Specify the other units that are required for this test.
});

test("beforeModel hook works", function(){
    var route = this.subject();
    Ember.run(function(){
        route.set("model", "Sample data");
    })
    console.log("Model set. Was beforeModel hook called?");
});
Run Code Online (Sandbox Code Playgroud)

样本路线

import Ember from 'ember';

export default Ember.Route.extend({

    beforeModel: function (transition) {
        console.log("Inside before-model hook");
    },

    afterModel: function() {
        console.log("In after-model hook");
    }
});
Run Code Online (Sandbox Code Playgroud)

Ale*_*cia 1

不幸的是,事情并非如此。beforeModel不是简单地在model设置之前和afterModel之后调用。beforeModel -> model -> afterModel它们只是作为路由生命周期的一部分按该顺序 ( ) 调用的钩子。

不幸的是,我还没有找到对路由进行单元测试的好方法。如果你有特定的beforeModel逻辑需要测试,那么也许你可以beforeModel直接调用?我发现路由逻辑最好通过接受式测试进行测试,因为这样您就可以像应用程序实际运行时一样调用路由。