Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如何从jasmine测试规范调用基本javascript函数?_Angularjs_Unit Testing_Jasmine - Fatal编程技术网

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

Angularjs 如何从jasmine测试规范调用基本javascript函数?,angularjs,unit-testing,jasmine,Angularjs,Unit Testing,Jasmine,我试图为javascript方法编写测试用例,但我的jasmine无法调用js方法。函数没有定义,这给了我一个错误 下面是控制器代码 (function () { "use strict"; angular.module('rbApp').controller('PQRCtrl', PQRCtrl); PQRCtrl.$inject = ['$scope', '$state', 'baseURL', 'PQRCtrlFactory', '$cookieStore']; function PQRC

我试图为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
})

});

您的
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 ")
    }
}

请分享一些代码。@Jax-我已经附上了代码,请告诉我做错了什么以及如何做对。那么有没有正确的方法来测试控制器内部的javascript函数。我会说,如果控制器内部的函数可以移动/提取到外部,请将其提取到某个工厂/服务,然后单独测试。否则,按照业务逻辑调用函数并检查结果。例如,如果是单击回调,则模拟单击事件,然后测试结果。