0

So i'm working in ruby on rails, and I've using it with AngularJS 1 for the first time, and therefore am setting up the unit testing for angularjs inside rails for the first time. I can test rails with rspec no problem, but i've been struggling to test angularjs, currently I'm working with teaspoon-jasmine and angular-mocks to test a simple angular controller, but I run into several problems. The first file below is my test file, I currently have it using angular.mock.module/inject and the error i'm getting is "Failed to instantiate module angularrApp due to..." it's basically saying I haven't created or loaded angularApp anywhere, I though mock was supposed to create a test module? If I the module to "angular.module("name", [])" like I would normally create an angular app, I run into more problems such as the mainController hasn't been created. I'm just overall having issues getting this to work properly, any suggestions? I'm trying to get just the simple first expect to work before I move on to the actual tests. And I am requiring angular and angular-mocks in the spec_helper.js file, all the files below. Would it help to require the file that creates the angular app in my spec_helper.js? I've tried but can't get it to work since one is in the spec directory, while my angular app is in app/assets. Also if it helps, here is the link to the tutorial I based this code off of http://angular-rails.com/find_and_browse.html

mainController_spec.js (test file)

'use strict';


describe("mainController", function() {

 var scope,
   ctrl,
   location,
   resource;

 var setupController = function() {
  angular.mock.inject( function($rootScope, $resource, $controller) {
   scope = $rootScope.$new();
      resource = $resource;
      ctrl = $controller('mainController', {$scope: scope, $resource: resource });
    })
 }


 beforeEach(function(){
  angular.mock.module("angularApp");
  setupController();
 })

 it('should work', function(){
  expect(true).toBe(true);
  // expect(scope.games).toBe([])
 })

});

mainController.js

'use strict';


myApp.controller('mainController', [ 'mainFactory', '$scope', '$resource', (factory, scope, resource) => {

 scope.games = [];

 
 factory.populateTable((data) => {
  scope.games = data;
 })

}]);

angular-app.js

'use strict';


const myApp = angular.module('angularApp', ['ngRoute', 'ngResource']);
// routes in another file
Jerrod
  • 115
  • 12

1 Answers1

0

For those that are interested, the issue I was having was that either teaspoon-jasmine, phantomjs or both don't recognize javascript es6 syntax, if there is any es6 in a file that would normally be required, the entire file and it's contents are ignored without any error messages. Once I reverted my angularApp and controller code to ES5, my problem was solved.

Jerrod
  • 115
  • 12