我正在尝试对包含 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/