Introdução
Agora que a velocidade foi eleita a plataforma de teste oficial do Meteor, vale a pena gastar algum tempo para aprender a coisa.
Este é um exemplo de como testar um aplicativo Meteor no lado do cliente com o CucumberJS e o navegador sem cabeça Zombie .
Configuração
Precisamos de um aplicativo Meteor para testar e da estrutura de teste para executar nossos testes. Vamos configurar tudo
Criação do aplicativo
este é um aplicativo Meteor normal criado com meteor create myApp
uma vez que a pasta do aplicativo existe, precisamos de uma tests
pasta nela com a seguinte estrutura
+ testes
++ recursos
+++ step_definitions
+++ suporte
o mundo do pepino
o ambiente de teste é configurado em um arquivo chamado world.coffee
ou world.js
que vai para a support
pasta. Nossa configuração é world.coffee
e se parece com isto:
module.exports = ->
@World = class MultiWorld extends Cucumber.World
constructor: ->
@zombie = new Cucumber.World.Zombie
@selenium = new Cucumber.World.Selenium if Package.selenium?
@protractor = new Cucumber.World.Protractor if Package.selenium?
super
pacotes mrt
esses pacotes podem ser instalados com mrt add
* velocity
* cucumber
* velocity-html-reporter
A aplicação
O aplicativo é o padrão do Meteor com apenas um pequeno ajuste: adicionamos um campo de entrada e tratamos o change
evento nele para ter algo para testar.
HTML
<head>
<link rel="icon" sizes="16x16 32x32" href="/favicon.png?v=2">
<title>app</title>
</head>
<body>
{{> hello}}
</body>
<template name="hello">
<h1 id="greeting">Hello {{name}}!</h1>
<input id="name"/><br>
{{greeting}}
<input type="button" value="Click"/>
</template>
JavaScript modelo
if (Meteor.isClient) {
Template.hello.helpers(
{
greeting: function () {
console.log("retunring greeting text")
return "Welcome to app.";
},
name: function() {
return Session.get("name");
}
})
Template.hello.events(
{
'change #name': function () {
console.log("changing the name");
Session.set("name", $("#name").val());
},
'click input': function () {
// template data, if any, is available in 'this'
if (typeof console !== 'undefined')
console.log("You pressed the button");
}
});
}
Testes
Agora precisamos de um teste. No Cucumber, isso é Feature
implementado em JavaScript ou CoffeeScript.
Arquivo de recurso
o arquivo que contém a descrição está e deve ser colocado na pasta do aplicativo. O nome do arquivo é significativo e deve ser usado na definição e implementação dos cenários de teste. Você pode ler tudo sobre isso na documentação do CucumberJs.hello.feature
tests/features
@zombie
Feature: Display hello world on the home page
Scenario: Go to the home page and see the hello world message
Given the application has been created
When I go to the home page and enter "Micha" in the name field
Then I should see "Hello Micha!" on the page
Implementação de teste
Para ter algo para executar, precisamos implementar o recurso em um arquivo javascript. O arquivo deve ser chamado em nosso caso. O nome deve ser o mesmo do recursohello.js
module.exports = function () {
this.Given(/^the application has been created$/, function (callback) {
callback();
});
this.When(/^I go to the home page and enter "([^"]*)" in the name field$/, function (name, callback) {
var z = this.zombie
z.home(function(){
z.browser.fill("#name", name)
z.browser.evaluate("$('#name').change()");
z.browser.wait(1000, callback);
})
});
this.Then(/^I should see "([^"]*)" on the page$/, function (greeting, callback) {
var browser = this.zombie.browser;
var actualGreeting = browser.text("#greeting");
if(greeting == actualGreeting) {
callback();
} else {
callback.fail(actualGreeting + " not equal to expected " + greeting);
}
});
}
Se você está familiarizado com zombieJs, deve ter notado que o evento de mudança não foi disparado da maneira usual de zumbi com, browser.fire
mas com a avaliação de algum javascript, z.browser.evaluate("$('#name').change()")
isso foi necessário, pois a maneira normal não funcionava com meteoro. Isso provavelmente está relacionado ao problema 181 em zumbi
Execução
você pode clonar o repositório com todos os arquivos do github comclone git@github.com:drgorb/meteor-cucumber-example.git
mude para o diretório do aplicativo e inicie com mrt
você deve ver os testes passarem