如何从jasmine测试规范调用基本的javascript函数?

时间:2015-12-14 09:21:15

标签: angularjs unit-testing jasmine

我试图为javascript方法编写测试用例,但我的jasmine无法调用js方法。它给了我错误,函数没有定义。

以下是控制器代码

(function () {
"use strict";
angular.module('rbApp').controller('PQRCtrl', PQRCtrl);
PQRCtrl.$inject = ['$scope', '$state', 'baseURL', 'PQRCtrlFactory', '$cookieStore'];
function PQRCtrl($scope, $state, baseURL, PQRCtrlFactory, $cookieStore) {
    var funcB=  function(){
        console.log("This line should called from jasmine ")
    }
}

}());

我的茉莉花规格

describe('PQRCtrl Controller Test Suite', function() {
var mockPQRCtrl,mockrootScope, mockscope, mockstate,mockcookies, mockstateparams, mockgetSourcePostsService, mockPQRCtrlFactory;
var baseURL = "****";

beforeEach(module('rbApp'));
beforeEach(module("ui.router"));
beforeEach(module("ngRoute"));
beforeEach(module("ngCookies"));
beforeEach(module("ui.bootstrap"));
beforeEach(module("toggle-switch"));
beforeEach(module("ngFileUpload"));
beforeEach(module("ngDraggable"));
beforeEach(module("angular-loading-bar"));
beforeEach(module("ngAnimate"));
beforeEach(module("ngGrid"));
beforeEach(module("kendo.directives"));
beforeEach(module('ui.bootstrap'));


beforeEach(inject(function($injector, _$rootScope_, _$controller_, _$httpBackend_, _$stateParams_, _$state_,_$cookieStore_,_PQRCtrlFactory_){
    var userData = {'token' : 'abc'};
    mockrootScope = _$rootScope_;
    mockstateparams = _$stateParams_;
    mockscope = mockrootScope.$new();
    mockstate = _$state_;
    mockcookies = _$cookieStore_;
    mockPQRCtrlFactory = _PQRCtrlFactory_;
    mockcookies.put('userInfo', userData);
    var userInfo = mockcookies.get('userInfo');
    var token = userInfo.token;

    mockPQRCtrlFactory = _$controller_('PQRCtrl',
        {

            '$scope': mockscope,
            '$state': mockstate,
            'baseURL' : baseURL,
            'PQRCtrlFactory': mockPQRCtrlFactory ,
            '$cookieStore' : mockcookies
        });
    }));

it("Test: PQRCtrl Controller exists or not", function() {
    expect(mockPQRCtrl).toBeDefined();

});
it("Test: funcB() Success", function() {
    funcB(); // its not calling my actual function in the controller
// it is saying that its not defined
})

});

1 个答案:

答案 0 :(得分:0)

您的funcB已在控制器PQRCtrl内定义。把它放在外面:

(function () {
"use strict";
var funcB;
angular.module('rbApp').controller('PQRCtrl',                             PQRCtrl);
PQRCtrl.$inject = ['$scope', '$state', 'baseURL', 'PQRCtrlFactory', '$cookieStore'];
function PQRCtrl($scope, $state, baseURL, PQRCtrlFactory, $cookieStore) {
    funcB = function(){
        console.log("This line should called from jasmine ")
    }
}