我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
存在的测试失败。这似乎是测试元素是否存在于测试中的正确方法,但似乎模板可能尚未完全呈现。