だから私はテスト全体に不慣れです(私は「ユニットテストを書くべきだ...」と言ったが、それをやったことがない人の1人でした:-p)。現在、このプロジェクトの単体テストを書いています。私は testacular + Jasmine を使用しており、browserify を使用してコンパイルしています。AngularJS のインジェクションをたくさんやろうとするまでは、何の問題もありませんでした。
今、私は単に ng-model のテストを行って、すべてを把握しようとしています。
必要なものがすべて含まれている testacular.conf ファイルがあります。
files = [
'../lib/jquery.js',
'../lib/angular.js',
'./lib/jasmine.js',
'./lib/angular-mocks.js',
JASMINE_ADAPTER,
'./tests.js' //compiled by browserify
];
コントローラーを定義しました (MainCtrl.coffee)
MainCtrl = ($scope, $rootScope) ->
$scope.hello = 'initial'
module.exports = (angularModule) ->
angularModule.controller 'MainCtrl', ['$scope', '$rootScope', MainCtrl]
return MainCtrl
そして、私は自分のテスト自体を持っています:(_MainCtrlTest.coffee、MainCtrl.coffeeと同じディレクトリにあります)
testModule = angular.module 'MainCtrlTest', []
MainCtrl = require('./MainCtrl')(testModule)
describe 'MainCtrlTest', ->
scope = null
elm = null
ctrl = null
beforeEach inject ($rootScope, $compile, $controller) ->
scope = $rootScope.$new()
ctrl = $controller MainCtrl, $scope: scope
elm = $compile('<input ng-model="hello"/>')(scope)
describe 'value $scope.hello', ->
it 'should initially equal input value', ->
expect(elm.val()).toBe scope.hello
it 'should change when input value changes', ->
scope.$apply -> elm.val('changedValue')
expect(scope.hello).toBe elm.val()
テストはすぐに失敗し、入力の elm.val() が空白を返し、scope.hello が意図した値 ('initial'、MainCtrl.coffee で設定) を返します。
ここで何が間違っていますか?