测试Angular.js控制器,而不使用Jasmine嘲笑工厂

Testing an Angular.js controller without mocking factory with Jasmine

本文关键字:Jasmine 工厂 js Angular 控制器 测试      更新时间:2023-09-26

我正在尝试对包含dataService工厂的角度控制器进行单元测试。问题是我得到了错误TypeError:"undefined"不是对象(正在评估"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");
    });
});

您需要使用angular.mok.module('myApp')引导您的应用程序在beforeEach方法中。

从测试名称来看,您似乎想要使用真正的服务("无模拟")。为了做到这一点,您应该从对$controller的显式调用中省略dataService属性。它将连接真实的实例。