4

emberjs を見ずに数か月が経過した後、私は今、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か?

4

2 に答える 2

12

JasmineSinonを使用した完全なテストは次のとおりです。

コード:

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();
            });
        });
    });
});

それが役に立てば幸い。

于 2012-07-11T12:57:05.277 に答える
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にあります。

于 2012-07-11T14:20:49.177 に答える