javascript - 使用 Jasmine 测试 Angular.js Controller 而不模拟工厂

标签 javascript angularjs unit-testing jasmine

我正在尝试对包含 dataService 工厂的 Angular Controller 进行单元测试。问题是我收到错误 TypeError: 'undefined' is not an object (evaluating 'myScope.data.test')

有人能看出我做错了什么吗?

/// <reference path="../scripts/jasmine.js" />
/// <reference path="../scripts/angular.js" />
/// <reference path="../scripts/angular-mocks.js" />

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

app.factory("dataService", ["$http", "$q", function ($http, $q) {
    var _test = function () {
        return "Hello world";
    };
    return {
        test: _test,
    };
}]);


var testController = ["$scope",  "dataService",
function ($scope, dataService) {
    $scope.data = dataService; // This is similar to a DAL
}];


describe('Tests my controller without mocks', function () {

    var myScope;
    var myDataService;

    beforeEach(inject(function ($rootScope, $httpBackend, $controller) {
        angular.module('myApp');
        myScope = $rootScope.$new();
        myDataService = $rootScope.dataService;

        $controller('testController', {
            $scope: myScope,
            dataService: myDataService
        });
    }));

    it('should say Hello', function () {
        expect(myScope.data.test).toBe("Hello world");
    });

});

最佳答案

您需要在 beforeEach 方法中使用 angular.mock.module('myApp'); 来引导您的应用。

从测试名称来看,您似乎想要使用真实的服务(“没有模拟”)。为此,您应该在对 $controller 的显式调用中省略 dataService 属性。它将连接真实的实例。

关于javascript - 使用 Jasmine 测试 Angular.js Controller 而不模拟工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26490143/

相关文章:

windows-phone-7 - 将 AngularJS 1.2 $location 服务注入(inject)到在 PhoneGap 3.0 中不起作用的 Controller 中

unit-testing - 在 Controller 单元测试中 stub 自定义TagLib方法

javascript - JQuery列表下拉菜单问题

javascript - 为什么我的 Angular.js fiddle 不起作用?

javascript - angular1 中的范围和触发器

javascript - Jasmine 测试对象在 Ajax 方法 spy 调用上的状态

javascript - 使用私有(private)变量的 Jasmine 测试函数

javascript - 如何使用带有 HTML 的 JavaScript 根据颜色 &lt;input&gt; 更改特定 <div> 的背景?

javascript - Promises.all() 跟踪单个任务的完成情况

javascript - 为 C3.js 图表图例添加标题