【发布时间】:2016-10-13 07:03:49
【问题描述】:
在我的测试中模拟/监视 API 调用时,我在运行 Jasmine 测试时遇到上述错误。这是我调用 API 的代码:
UploadedReleasesController.$inject = ['$log', '$scope', '$filter', '$modal', 'ReleaseService', 'TrackService', 'APP_CONFIG', 'DeliveriesService'];
function UploadedReleasesController ($log, $scope, $filter, $modal, releaseService, trackService, APP_CONFIG, deliveriesService){
.
.
.
releaseService.releases(vm.currentWorkspace).then(function (responseValues) {
vm.albums = responseValues;
if(vm.albums.length !== 0){
vm.selected.album = vm.albums[0];
releaseService 是我定义的服务,releases 是我想要监视的方法之一。它需要一个字符串参数,比如说'HIGH'。这是我要模拟该调用的测试文件:
describe('app module', function() {
var vm, scope, modalInstance, releaseService, trackService, deliveriesService;
beforeEach(module('app.uploadedReleases')); // Main module name
beforeEach(module('app.config'));
beforeEach(module('auth'));
beforeEach(function() {
var mockReleasesData = {
"test" : 100
}
};
releaseService = jasmine.createSpyObj("releaseService", ["releases"]);
releaseService.releases('HIGH').and.returnValue(mockReleasesData);
});
beforeEach(inject(function($controller, $log, $rootScope, $filter, APP_CONFIG) {
scope = $rootScope.$new();
modalInstance = {
close: jasmine.createSpy('modalInstance.close'),
open: jasmine.createSpy('modalInstance.open'),
dismiss: jasmine.createSpy('modalInstance.dismiss'),
result: {
then: jasmine.createSpy('modalInstance.result.then')
}
};
vm = $controller('UploadedReleasesController', {'APP_CONFIG':APP_CONFIG, '$log':$log, '$scope':scope, '$filter':$filter, '$modal':modalInstance,
'ReleaseService':releaseService, 'TrackService':trackService, 'DeliveriesService':deliveriesService});
}));
运行测试时,我收到错误:
TypeError: 'undefined' 不是对象(评估 'releaseService.releases('HIGH').and') 在 test-release.controller.spec.js:93 TypeError:“未定义”不是对象(评估“releaseService.releases(vm.currentWorkspace).then”) 未定义
这是来自release.service.js的实际releaseService
releaseService.releases = getReleases;
.
.
.
function getReleases(workspace){
var releases = [];
headers.Workspace = workspace; // set the workspace
var deferred = $q.defer();
// Then make $http calls and return a promise
.
.
【问题讨论】:
标签: javascript angularjs unit-testing jasmine