AngularJS/Rails アプリがあり、新しいレコードを作成するときに AngularJS コントローラーがバックエンド サーバーに投稿していることをテストしたいと考えています。(テストにはジャスミンを使用しています)
これが私の試みたテストです
describe "create", ->
beforeEach(inject ( ($controller, $rootScope, $location, $state, $httpBackend) ->
@redirect = spyOn($location, 'path')
@httpBackend.whenGET('/assets/layouts/default.html.erb').respond(200)
@httpBackend.whenGET('/assets/letters/index.html.erb').respond(200)
@httpBackend.whenPOST('/api/letters').respond(200)
$controller("LettersController", { $scope: @scope, $location: @location })
))
it "sends a post to the backend", ->
@httpBackend.expectPOST('/api/letters', {"letter":{},"_utf8":"☃"}).respond(200)
@scope.create()
私がテストしているコードは次のとおりです。
$scope.create = ->
Letter.save(
{}
,
letter:
subject: $scope.letter.subject
body: $scope.letter.body
# success
, (response) ->
$location.path "/letters"
# failure
, (response) ->
)
問題のコードは正しく動作し、テストに合格します。問題は、Letter.save コードをコメントアウトした場合 (これにより、AngularJS リソースを介して投稿が行われます)、テストに合格することです。
テストを適切に機能させるにはどうすればよいですか?
私の完全なテスト アプリケーションはこちらです: https://github.com/map7/angularjs_rails_example2