0

sanjo:jasmineアプリのテストに使用しています。クライアント側の統合テストとBlaze.render. alanning:roles役割の管理に使用しています。

私のテンプレートでは、次のようなものです(簡単にするために最小化しています):

<template name="header">
    <!-- Fixed navbar -->
    <div class="navbar navbar-default navbar-top navbar-fixed-top" role="navigation">
        <div class="container">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                    <span class="sr-only fa fa-bars"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a id="homelink" class="navbar-brand {{isActiveRoute regex='home' className='active'}}" href="/">AppName</a>
            </div>
            <div class="navbar-collapse collapse">
                <ul class="nav navbar-nav">
                    <li class="{{isActiveRoute regex='dashboard' className='active'}}"><a id="daskboardlink" href="{{pathFor 'dashboard'}}">Dashboard</a></li>
                    {{#if isInRole 'ADMIN'}}
                        <li class="{{isActiveRoute regex='admin' className='active'}}"><a id="adminlink" href="{{pathFor 'admin'}}">Administration</a></li>
                    {{/if}}
                </ul>
                <ul class="nav navbar-nav navbar-right">
                  {{#if currentUser}}
                    <a href="/signout">Sign Out</a>
                  {{else}}
                  <a href="/signin">Sign In</a>
                  {{/if}}
                </ul>
            </div>
            <!--/.nav-collapse -->
        </div>
    </div>
</template>

私のテストでは、次のようにします。

describe("Header template - NO MOCKS", function() {
  it("should not show Admin for anonymous users", function() {
    var div = document.createElement("DIV");
    Blaze.render(Template.header, div);

    expect($(div).find("#adminlink")[0]).not.toBeDefined();
  });

  it("should show home for anonymous users", function() {
    var div = document.createElement("DIV");
    Blaze.render(Template.header, div);

    expect($(div).find("#homelink")[0]).toBeDefined();
  });


  ////////////////////////
  // Admin user header tests
  it("should be able to login an admin user", function() {
    Meteor.loginWithPassword('admin', 'admin', function (err) {
      expect(err).toBeUndefined();
      done();
    });
  });

  it("should show Forms for admin users", function() {
    var div = document.createElement("DIV");
    Blaze.render(Template.header, div);

    expect($(div).find("#adminlink")[0]).toBeDefined();
  });

  it("should be able to logout an admin user", function (done) {
    Meteor.logout(function (err) {
      expect(err).toBeUndefined();
      done();
    });
  });
});

匿名ユーザーの最初の一連のテストは問題なくパスし、管理者のログインとログアウトも同様です。ただし、#adminlinkが存在するかどうかを確認するテストは失敗します。これは、要素がテスト内に存在するかどうかをテストする正しい方法のようですが、テンプレートがまだ完全にレンダリングされていないようです。

4

1 に答える 1

0

ここで説明されているようにヘルパーを追加してから、次のように仕様の先頭に beforeEach を追加します。

describe("Header template - NO MOCKS", function() {
    beforeEach(function (done) {
        Router.go('/');
        Tracker.afterFlush(done);
    });

    beforeEach(waitForRouter);

    ...rest of your code
}
于 2015-05-30T19:40:28.780 に答える