Saya mencoba menjalankan tes unit layanan default di proyek saya (Diambil dari proyek Benih Angular di GitHub), tetapi saya terus mendapatkan kesalahan "modul tidak ditentukan".
Saya telah membaca bahwa itu mungkin ada hubungannya dengan urutan file JavaScript yang direferensikan , tetapi sepertinya saya tidak dapat membuatnya berfungsi, jadi semoga salah satu dari Anda mungkin dapat membantu.
Konfigurasi saya untuk pengujian terlihat seperti ini:
basePath = '../';
files = [
'publik / javascripts / lib / jquery-1.8.2.js',
'public / javascripts / lib / angular.js',
'publik / javascripts / lib / angular- .js',
'public / app.js ',
' public / controllers / .js ',
' public / directives.js ',
' public / filter.js ',
' public / services.js ',
JASMINE,
JASMINE_ADAPTER,
' public / javascripts / lib / angular-mock. js ',
' test / unit / *. js '];autoWatch = true;
browser = ['Chrome'];
junitReporter = {outputFile: 'test_out / unit.xml', suite: 'unit'};
Layanannya terlihat seperti berikut:
angular.module('myApp.services', []).
value('version', '0.1');
Tesnya terlihat seperti ini:
'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');
}));
});
});
Dan kesalahan saat menjalankan tes melalui testacular adalah ini:
ReferenceError: modul tidak didefinisikan
Jawaban:
Anda kehilangan file angular-mocks.js .
sumber
angular.module
danangular.mock.module
yang tidak sama. Thewindow.module
fungsi alias untukangular.mock.module
. Lihat jawaban ini untuk lebih lanjut.angular-mocks
dalamkarma.conf.js
file, dan menjalankan tes melalui Karma, bukan Jasmine. Dengan cara ini, ketika Karma dijalankan, ia mengambilangular-mocks
ekstensi dan memasukkannya ke dalam lingkungan.Saya memiliki masalah yang sama, dan saya mengerti mengapa itu tidak berfungsi: javascript jasmine.js harus dirujuk SEBELUM file angular-mocks.js. Memang, angular-mocks.js memeriksa apakah Jasmine dimuat, dan hanya jika itu akan menambah fungsi modul ke jendela.
Berikut ini adalah ekstrak kode Angular Mocks:
(Sunting setelah beberapa komentar tentang 'peretasan' yang saya punya di bawah: ini hanya ekstrak kode, ini bukan sesuatu yang perlu Anda tulis sendiri, sudah ada di sana!)
Singkatnya: Cukup referensi jasmine.js Anda sebelum angular-mocks.js dan pergilah.
sumber
The
window.module
Fungsi datang dalam sudut-mocks.js dan merupakan istilah untukangular.mock.module
. Seperti disebutkan dalam dokumen ,module
fungsinya hanya bekerja dengan Jasmine.Menggunakan Testacular , contoh file konfigurasi berikut ini akan memuat
angular-mocks.js
.Dan, seperti yang disarankan di tempat lain, Anda dapat menjalankan Testacular dengan debug logging untuk melihat skrip apa yang dimuat (Anda juga dapat melihat hal yang sama di inspektur):
The
angular.mock.inject
docs termasuk contoh lengkap cantik.sumber
module
sekarang juga bekerja dengan mokaKami menggunakan 'modul' tanpa 'sudut' dalam pengujian unit kami dan itu berfungsi dengan baik.
CoffeeScript:
yang mengkompilasi ke
JavaScript:
Satu-satunya waktu saya melihat sesuatu seperti kesalahan yang Anda gambarkan adalah jika dalam file testacular.conf.js file angular-mocks.js tidak terdaftar di bagian file sebelum spesifikasi mencoba menggunakan 'modul'. Jika saya letakkan setelah tes saya di daftar 'file' saya dapatkan
(Tes kami sedang dijalankan melalui PhantomJS)
sumber
Saya telah memasukkan angular-mocks.js dalam konfigurasi karma saya, tetapi masih mendapatkan kesalahan. Ternyata urutannya penting dalam array file. (duh) Sama seperti di kepala html doc, jika skrip memanggil sudut sebelum ditentukan, dan terjadi kesalahan. Jadi saya hanya harus memasukkan app.js saya setelah angular.js dan angular-mocks.js.
sumber
Jika Anda menggunakan Yeoman dan generator sudutnya, Anda mungkin mendapatkan kesalahan ini. Terutama ketika Anda melakukan Tutorial (._.)
Saya memperbaikinya, dengan menyalin file angular-mocks.js, dari bower_components / angular-mock dir ke test / mock dir. Tentu saja Anda harus yakin, bahwa file karma.conf.js Anda telah dikonfigurasi dengan benar.
Salam pembuka!
sumber
Saya memiliki masalah yang sama ketika saya melakukan sesuatu seperti
var module = angular.module('my',[])
. Saya perlu memastikan bahwa itu dikelilingi oleh IIFEsumber