Javascript 在不使用Jasmine模拟工厂的情况下测试Angular.js控制器

Javascript 在不使用Jasmine模拟工厂的情况下测试Angular.js控制器,javascript,angularjs,unit-testing,jasmine,Javascript,Angularjs,Unit Testing,Jasmine,我正在尝试对包含dataService工厂的angular控制器进行单元测试。问题是我得到了错误TypeError:“undefined”不是一个对象(评估“myScope.data.test”) 有人能看出我做错了什么吗 /// <reference path="../scripts/jasmine.js" /> /// <reference path="../scripts/angular.js" /> /// <reference path="../scrip

我正在尝试对包含dataService工厂的angular控制器进行单元测试。问题是我得到了错误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");
    });

});
//
/// 
/// 
var-app=angular.module('myApp',[]);
app.factory(“数据服务”、[“$http”、“$q”、函数($http、$q){
var_test=函数(){
返回“你好世界”;
};
返回{
测试:_测试,
};
}]);
var testController=[“$scope”,“dataService”,
功能($scope,dataService){
$scope.data=dataService;//这类似于DAL
}];
描述('在没有模拟的情况下测试我的控制器',函数(){
var myScope;
var-myDataService;
beforeach(注入函数($rootScope、$httpBackend、$controller){
角度模块('myApp');
myScope=$rootScope.$new();
myDataService=$rootScope.dataService;
$controller('testController'{
$scope:myScope,
数据服务:myDataService
});
}));
它('should say Hello',函数(){
expect(myScope.data.test).toBe(“你好世界”);
});
});

您需要使用angular.mock.module(“myApp”)引导应用程序;在beforeach方法中


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

感谢您的帮助,下面是可以工作的代码描述('Tests my controller without mock',function(){var myScope;var myDataService;beforeach(angular.mock.module('myApp'));beforeach(inject)(function($rootScope,$httpBackend,$controller){myScope=$rootScope.$new();$controller('testController',{$scope:myScope});});