先のmiddleman-jasmineを使って、テストを書こうとしたのだけれど、色々とハマってしまった。
どうも世間で書かれているテストコードが自分の環境では動かない。
とりあえず動いたコードをここに書いておく。
まず、spec.coffeeに、angular-mock.jsを登録する。
angular-mocksの置き場所は自分で考えてください!ちなみに私の場合はbower_components以下にあります。
#= require application #= require angular-mocks/angular-mocks
次にテストを書く。
'use strict'; describe('RssReader controllers', function() { describe('TopCtrl', function(){ var $scope, createController; beforeEach(function(){ module('RssReader.controllers'); inject(function($rootScope, $controller) { $scope = $rootScope.$new(); createController = function(){ return $controller('TopCtrl', { $scope: $scope, $rootScope: $rootScope }); } }); }); it('タイトルがIonicRSSReaderであること', function(){ var controller = createController(); expect($scope.title).toBe('IonicRSSReader'); }); }); });
よくみたサンプルコードだと、beforeEach(module(“RssReader.controllers”));
というコードだったのですが、これだとmoduleがundefinedだと言われてテストが落ちるだけでした。私もそもそもなんでこういうコードなのか謎だなと思っていたので、ここを無名関数にしたら普通に動いたので、beforeEach(function(){});がよさそうです。それとも、なにか前提条件が間違っているのだろうか…。