Estou tentando executar o teste de unidade de serviço padrão no meu projeto (tirado do projeto Angular Seed no GitHub), mas continuo recebendo o erro "módulo não está definido".
Li que poderia ter algo a ver com a ordem dos arquivos JavaScript referenciados , mas não consigo fazê-lo funcionar, por isso espero que um de vocês possa ajudar.
Minha configuração para o teste é assim:
basePath = '../';
arquivos = [
'public / javascripts / lib / jquery-1.8.2.js',
'public / javascripts / lib / angular.js',
'public / javascripts / lib / angular- .js',
'public / app.js ',
' public / controllers / .js ',
' public / directives.js ',
' public / filters.js ',
' public / services.js ',
JASMINE,
JASMINE_ADAPTER,
' public / javascripts / lib / angular-mocks. js ',
' test / unit / *. js '];autoWatch = true;
navegadores = ['Chrome'];
junitReporter = {outputFile: 'test_out / unit.xml', conjunto: 'unit'};
O serviço é semelhante ao seguinte:
angular.module('myApp.services', []).
value('version', '0.1');
O teste é assim:
'use strict';
describe('service', function() {
beforeEach(module('myApp.services'));
describe('version', function() {
it('should return current version', inject(function(version) {
expect(version).toEqual('0.1');
}));
});
});
E o erro ao executar o teste através do testacular é o seguinte:
ReferenceError: o módulo não está definido
Respostas:
Está faltando o arquivo angular-mocks.js .
fonte
angular.module
e nãoangular.mock.module
são os mesmos. A função é um alias para . Veja esta resposta para mais.window.module
angular.mock.module
angular-mocks
nokarma.conf.js
arquivo e executar os testes através de Karma, não Jasmine. Dessa forma, quando o Karma é executado, ele pega asangular-mocks
extensões e as incorpora ao ambiente.Eu tive o mesmo problema e entendi por que não estava funcionando: O javascript jasmine.js deve ser referenciado antes do arquivo angular-mocks.js. De fato, o angular-mocks.js verifica se o Jasmine está carregado, e somente se estiver adicionará a função do módulo à janela.
Aqui está um extrato do código Angular Mocks:
(Edite após os poucos comentários sobre 'hacking' que tive abaixo: este é apenas um extrato do código, não é algo que você precise escrever, já está lá!)
Em poucas palavras: Basta referenciar o seu jasmine.js antes de angular-mocks.js e pronto.
fonte
A
window.module
função vem em angular-mocks.js e é uma abreviação deangular.mock.module
. Conforme mencionado nos documentos , amodule
função funciona apenas com o Jasmine.Usando o Testacular , o seguinte exemplo de arquivo de configuração será carregado
angular-mocks.js
.E, como sugerido em outro lugar, você pode executar o Testacular com o log de depuração para ver quais scripts estão carregados (você também pode ver o mesmo no inspetor):
Os
angular.mock.inject
documentos incluem um exemplo bastante completo.fonte
module
agora também trabalha com mochaUsamos 'module' sem 'angular' em nossos testes de unidade e funciona bem.
CoffeeScript:
que compila para
JavaScript:
A única vez em que vejo algo como o erro que você descreveu é que, no arquivo testacular.conf.js, o arquivo angular-mocks.js não está listado na seção de arquivos antes das especificações que tentam usar o 'módulo'. Se eu colocá-lo após meus testes na lista de 'arquivos', recebo
(Nossos testes estão sendo executados pelo PhantomJS)
fonte
Eu incluí angular-mocks.js na minha configuração de karma, mas ainda estava recebendo o erro. Acontece que a ordem é importante na matriz de arquivos. (duh) Assim como na cabeça de um documento html, se um script chama angular antes de ser definido, e ocorre um erro. Então, eu apenas precisei incluir meu app.js após angular.js e angular-mocks.js.
fonte
Se você estiver usando o Yeoman e seu gerador angular, provavelmente receberá esse erro. Especialmente quando você faz o Tutorial (._.),
Eu o corrigi, copiando o arquivo angular-mocks.js, do diretório bower_components / angular-mocks para o diretório test / mock. Claro que você precisa ter certeza de que o seu arquivo karma.conf.js está configurado corretamente.
Saudações!
fonte
Eu tive esse mesmo problema quando estava fazendo algo parecido
var module = angular.module('my',[])
. Eu precisava ter certeza de que estava cercado pelo IIFEfonte