6

エンド ツー エンドのテスト中に AJAX リクエストをモックするように scenario.js を変更する最も簡単な方法は何ですか?

<!doctype html>
<html lang="en" ng-app="myApp">
<head>
  <meta charset="utf-8">
  <title>My Test AngularJS App</title>
  <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js"></script>
  <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular-resource.min.js"></script>

  <script language="javascript" type="text/javascript">
      angular.module('myApp', ['ngResource']);
      function PlayerController($scope,$resource){
        $scope.player = $resource('player.json').get();
      }
    </script>

</head>
  <body ng-controller="PlayerController">
    <p>Hello {{player.name}}</p>
  </body>
</html>

Player は、サーバー上の player.json という名前のファイルから正しく取得され、次のテストに合格します。このテストに別の json を渡し、サーバーへのフェッチを防ぐにはどうすればよいですか?

/*
How do I pass in
player.json -> {"name":"Chris"}
*/
describe('my app', function() {

  beforeEach(function() {
    browser().navigateTo('../../app/index.html');
  });

  it('should load player from player.json', function() {
    expect(element('p:first').text()).
        toMatch("Hello Chris");
    pause();
  });

});
4

3 に答える 3

4

http リクエストをモックするには、ngMockE2E モジュールの $httpBackendを使用する必要があります。ドキュメントを見てください。

于 2012-12-17T13:38:02.010 に答える
0

まず、Angular-mocks.js とモジュールを作成するファイル (たとえば app.js) を、ng-app 宣言を含む index.html ページに追加します。

<html lang="en" ng-app="myApp">
  <head>
    <script src="js/app.js"></script>
    <script src="../test/lib/angular/angular-mocks.js"></script>
    ...

次に、app.js ファイルでモジュールを定義し、モック応答を追加します。

var myAppDev = angular.module('myApp', ['ngResource','ngMockE2E']);

myAppDev.run(function($httpBackend) {
    var user = {name: 'Sandra'};
    $httpBackend.whenGET('/api/user').respond(user); 
});
于 2012-12-24T04:32:06.270 に答える