2014-02-10 2 views
2

OK, Итак, я впервые пытаюсь начать модульное тестирование с помощью Jasmine на проекте Angular JS, и я ударяю несколько дорожных блоков.

я после очень хорошей ссылки в этом блоге о том, как set this all up in Visual Studio

Мой тест в проекте библиотеки классов и выглядит так: -

/// <reference path="../../../../src/tasks.web/scripts/angular-1.2.10.js" /> 
/// <reference path="../../../../src/tasks.web/scripts/angular-route-1.2.10.js" /> 
/// <reference path="../../../../src/tasks.web/scripts/app.js" /> 
/// <reference path="../../../../src/tasks.web/scripts/controllers.js" /> 
/// <reference path="../lib/angular/angular-mocks.js" /> 

describe("TaskListController", function() { 
    beforeEach(module('taskApp.controllers')); 

    it("has tasks defined", function() { 
     var $scope = {}; 
     $controller("TaskListController", { $scope: $scope }); 
     expect($scope.tasks).toBeDefined(); 
    }); 
}); 

Остальные мои приложения выглядит как это: -

app.js

var app = angular.module("taskApp", [ 
    "ngRoute", 
    "appControllers" 
]); 

app.config(["$routeProvider", 
    function($routeProvider) { 
     $routeProvider. 
      when("/tasks", { 
       templateUrl: "partials/task-list.html", 
       controller: "TaskListController" 
      }). 
      otherwise({ 
       redirectTo: "/tasks" 
      }); 
    } 
]); 

controller.js

var appControllers = angular.module("appControllers", []); 

appControllers.controller("TaskListController", function ($scope) { 
    $scope.tasks = {}; 
}); 

Все указанные файлы находятся там (нет 404s). Visual Studio найти тестовый штраф и запускает его, однако я получаю ReferenceError: Can't find variable: $controller

Любая помощь с благодарностью получил, как я знаю, что я очень близко к тому, эту работу, и я знаю, что это просто что-то простое, что я отсутствует.

+1

В тесте имя контроллеров модуль имеет другое имя. 'BeforeEach (модуль (' taskApp.controllers '));' должен быть вместо 'beforeEach (module (' appControllers ')); ? – klode

+0

спасибо, что не совсем это сделал, но, объединив его с предложением Майкла, он решил это. – baynezy

ответ

5

Вам необходимо ввести $controller. Один из способов будет:

it("has tasks defined", inject(function($controller) { 
    var $scope = {}; 
    $controller("TaskListController", { $scope: $scope }); 
    expect($scope.tasks).toBeDefined(); 
})); 

Кроме того, необходимо ссылаться на нужный модуль в beforeEach

Так что вам нужно сделать следующее: -

beforeEach(module('appControllers')); 
Смежные вопросы