ンンンパ

ふとしです

移転しました

AngularJS + Jasmine でテストに入門する準備。

とりあえず動かしたいなと思って AngularJS を動かしている HTML に describe などをコピペすると Uncaught ReferenceError: describe is not defined などと言われる。

先生方におたずねすると angular-mocks.js を読み込みなさいと言われるが、それでもだめ。Jasmine 本体を別途ちゃんと読み込まないとダメなのでした。

Jasmine は AngularJS とちがって勝手に動き出さないので、サンプルから起動部分をコピペしてとりあえず動かす。

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<link rel="stylesheet" href="/css/jasmine.css">
<script src="/js/jasmine.js"></script>
<script src="/js/jasmine-html.js"></script>
<script src="/js/angular.js"></script>
<script src="/js/angular-mocks.js"></script>
<script>
	angular.module('app', [])
		.factory('model', function () {
			var store = [];
			return {
				add:function (thing) {
					store.push(thing);
				},
				getAdded:function () {
					return store;
				}
			};
		});

	describe('test', function () {
		var model;
		beforeEach(module('app'));
		beforeEach(inject(function (_model_) {
			model = _model_;
		}));
		it('add and store', function () {
			var thing = {a : 'b'};
			model.add(thing);
			expect(model.getAdded())
				.toContain(thing);
		});
	});

	(function() {
		var jasmineEnv = jasmine.getEnv();
		jasmineEnv.updateInterval = 1000;

		var htmlReporter = new jasmine.HtmlReporter();

		jasmineEnv.addReporter(htmlReporter);

		jasmineEnv.specFilter = function(spec) {
			return htmlReporter.specFilter(spec);
		};

		var currentWindowOnload = window.onload;

		window.onload = function() {
			if (currentWindowOnload) {
				currentWindowOnload();
			}
			execJasmine();
		};

		function execJasmine() {
			jasmineEnv.execute();
		}

	})();
</script>
</head>
<body ng-app>
</body>
</html>