你如何测试你的emberjs路线?

时间:2012-07-11 12:41:10

标签: ember.js ember-old-router

几个月后没有看emberjs,我现在想回到它,我正在尝试新的路由器。我想测试我的路线。

有人试图用emberjs编写一些路由测试吗?

让我们假设以下路由器非常基本:

App.Router = Ember.Router.extend({
  root: Ember.Route.extend({
    index: Ember.Route.extend({
      route: '/',
      connectOutlets: function(router, context) {
        router.get('applicationController').connectOutlet({name: 'home'});
      }
    })
  })
})

如何测试加载root.index路由正确加载HomeView

2 个答案:

答案 0 :(得分:11)

以下是完整测试,使用Jasmine& Sinon

代码:

describe("Given the Router", function(){

    var router = null;

    beforeEach(function(){
        router = Router.create();
    });

    afterEach(function(){
        router = null;
    });

    it("Should be defined", function(){
        expect(router).toBeDefined();
    });

    it("Should have an root route", function(){
        expect(router.get("root")).toBeDefined();
    });

    describe("its root route", function(){
        var root = null;
        beforeEach(function(){
            root = router.get("root").create();
        });

        afterEach(function(){
            root = null;
        });

        it("should have an index route", function(){
            expect(root.get("index")).toBeDefined();
        });

        describe("its index route", function(){
            var indexRoute = null;
            beforeEach(function(){
                indexRoute = root.get("index").create();
            });

            it ("should have route of /", function(){
                expect(indexRoute.get("route")).toEqual("/");
            });

            it ("should connect the outlets to home", function(){

                var fakeRouter = Em.Object.create({applicationController: {connectOutlet: function(){} } });

                var connectOutletSpy = sinon.spy(fakeRouter.applicationController, "connectOutlet");

                var methodCall = connectOutletSpy.withArgs({name:"home"});

                indexRoute.connectOutlets(fakeRouter);

                expect(methodCall.calledOnce).toBeTruthy();
            });
        });
    });
});

希望它有所帮助。

答案 1 :(得分:4)

以下是Ember已经为您测试了connectOutlet的方法:

https://github.com/emberjs/ember.js/blob/master/packages/ember-views/tests/system/controller_test.js

test("connectOutlet instantiates a view, controller, and connects them", function() {
  var postController = Ember.Controller.create();

  var appController = TestApp.ApplicationController.create({
    controllers: { postController: postController },
    namespace: { PostView: TestApp.PostView }
  });
  var view = appController.connectOutlet('post');

  ok(view instanceof TestApp.PostView, "the view is an instance of PostView");
  equal(view.get('controller'), postController, "the controller is looked up on the parent's controllers hash");
  equal(appController.get('view'), view, "the app controller's view is set");
});

其他与路由相关的测试可在https://github.com/emberjs/ember.js/tree/master/packages/ember-routing/tests

找到