var app = angular.module('plunker', ['ngResource']);

app.controller('MainCtrl', function($scope) {
  $scope.name = 'World';
});

app.factory('Person', function ($resource) {
  var Persons =  $resource("/person", {}, {
    query: {method:'GET', isArray: true}
  });

 Persons.prototype.getName = function () {
   /* do something */
   var name = 'some name';
   return name;
  }
  return Persons;
});
describe('Person service', function() {
  var $scope = null;
  var ctrl = null;
  var API_URL = '/person';
  var Person, httpBackend, resource;

  //you need to indicate your module in a test
  beforeEach(module('plunker'));

  beforeEach(inject(function($rootScope, $controller, $injector, _Person_) {
    $scope = $rootScope.$new();
    httpBackend = $injector.get('$httpBackend');
    Person = _Person_;

    ctrl = $controller('MainCtrl', {
      $scope: $scope
    });
  }));
  
  afterEach(function() {
    httpBackend.verifyNoOutstandingExpectation();
  });

  it("should be a resource", function() {
    expect(typeof Person).toBe('function');
    expect(typeof Person.get).toBe('function');
    expect(typeof Person.save).toBe('function');
    expect(typeof Person.remove).toBe('function');
    expect(typeof Person['delete']).toBe('function');
    expect(typeof Person.query).toBe('function');
  });
  
  it('getName should return a string', function () {
    httpBackend.when('GET', API_URL).respond([{name: 'john'},{name:'sam'}]);
    var persons = Person.query();
    console.log(persons);
    httpBackend.flush();
    var name = persons[0].getName();
    expect(typeof name).toBe('string');
    expect(name).toBe('some name');
  });
});
<!DOCTYPE html>
<html ng-app="plunker">
  
  <head>
    <meta charset="utf-8">
    <title>AngularJS test</title>
    <link data-require="jasmine" data-semver="1.3.1" rel="stylesheet" href="//cdn.jsdelivr.net/jasmine/1.3.1/jasmine.css">
    <script data-require="json2" data-semver="0.0.2012100-8" src="//cdnjs.cloudflare.com/ajax/libs/json2/20121008/json2.js"></script>
    <script data-require="jasmine" data-semver="1.3.1" src="//cdn.jsdelivr.net/jasmine/1.3.1/jasmine.js"></script>
    <script data-require="jasmine" data-semver="1.3.1" src="//cdn.jsdelivr.net/jasmine/1.3.1/jasmine-html.js"></script>
    <script data-require="angular.js" data-semver="1.1.5" src="http://code.angularjs.org/1.1.5/angular.min.js"></script>
    <script data-require="angular-resource.js" data-semver="1.1.5" src="http://code.angularjs.org/1.1.5/angular-resource.min.js"></script>
    <script data-require="angular-mocks" data-semver="1.1.5" src="http://code.angularjs.org/1.1.5/angular-mocks.js"></script>
    <link rel="stylesheet" href="style.css">
    <script src="app.js"></script>
    <script src="appSpec.js"></script>
    <script src="jasmineBootstrap.js"></script>
    <!-- bootstraps Jasmine -->
  </head>
  
  <body>
    <div id="container" ng-controller="MainCtrl">
       <h1>Resource custom method tests</h1>

    </div>
    <div id="HTMLReporter" class="jasmine_reporter"></div>
  </body>

</html>
(function() {
  var jasmineEnv = jasmine.getEnv();
  jasmineEnv.updateInterval = 250;

  /**
   Create the `HTMLReporter`, which Jasmine calls to provide results of each spec and each suite. The Reporter is responsible for presenting results to the user.
   */
  var htmlReporter = new jasmine.HtmlReporter();
  jasmineEnv.addReporter(htmlReporter);

  /**
   Delegate filtering of specs to the reporter. Allows for clicking on single suites or specs in the results to only run a subset of the suite.
   */
  jasmineEnv.specFilter = function(spec) {
    return htmlReporter.specFilter(spec);
  };

  /**
   Run all of the tests when the page finishes loading - and make sure to run any previous `onload` handler

   ### Test Results

   Scroll down to see the results of all of these specs.
   */
  var currentWindowOnload = window.onload;
  window.onload = function() {
    if (currentWindowOnload) {
      currentWindowOnload();
    }

    //document.querySelector('.version').innerHTML = jasmineEnv.versionString();
    execJasmine();
  };

  function execJasmine() {
    jasmineEnv.execute();
  }
})();
/* restore "body" styling that were changes by "jasmine.css"... */
body { background-color: white; padding: 0; margin: 8px; }
/* ... but remain the "jasmine.css" styling for the Jasmine reporting */
.jasmine_reporter { background-color: #eeeeee; padding: 0; margin: 0; }