Правильный метод интеграционного тестирования с помощью sanjo:jasmine и Blaze.render в
Я использую 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
присутствует не удается. Кажется, это правильный способ проверить, присутствует ли элемент в тесте, но может показаться, что шаблон еще не полностью обработан.
1 ответ
Добавьте помощника, как описано здесь, затем добавьте beforeEach вверху вашей спецификации, как здесь:
describe("Header template - NO MOCKS", function() {
beforeEach(function (done) {
Router.go('/');
Tracker.afterFlush(done);
});
beforeEach(waitForRouter);
...rest of your code
}