Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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
Unit testing 用茉莉花测试AngularJS工厂功能_Unit Testing_Angularjs_Jasmine_Factory - Fatal编程技术网

Unit testing 用茉莉花测试AngularJS工厂功能

Unit testing 用茉莉花测试AngularJS工厂功能,unit-testing,angularjs,jasmine,factory,Unit Testing,Angularjs,Jasmine,Factory,我对此非常陌生(angularjs、jasmine、testacular),我有这段代码(我简化了一点,只留下重要的东西): 因此,我要做的是测试当myu module.myu controller.myu函数启动时,是否调用myu data.myu factory.save //my_test.js describe('testing my_controller.my_function', function () { beforeEach(module('my_module'));

我对此非常陌生(angularjs、jasmine、testacular),我有这段代码(我简化了一点,只留下重要的东西):

因此,我要做的是测试当myu module.myu controller.myu函数启动时,是否调用myu data.myu factory.save

//my_test.js
describe('testing my_controller.my_function', function () {
    beforeEach(module('my_module'));

    var $rootScope, $controller;
    beforeEach(inject(function(_$rootScope_, _$controller_) {
        $rootScope = _$rootScope_;
        $controller = _$controller_;
    }));

    scope = $rootScope.$new();

    it('should call the save function', function() {
        scope.my_function();
        expect(my_data.save).toHaveBeenCalled();
    });
}

我需要一点帮助。

你离你需要的还不远。首先,由于您需要
my_数据
作为
my_模块
依赖项,因此无需将
my_模块
注入控制器,只需注入工厂(
my_工厂

第二,你想利用。文档不是很完整,但提供了很好的洞察力。更多和更多(查找
测试/单元/控制器

基本上,您要做的是模拟服务,这样您就可以确信它已被调用。要实现它,请将
$provide
注入您的
angular.mock.module
调用并提供模拟的
my_factory
服务。实现这一目标的最佳方式如下:

description('测试我的\u控制器。我的\u函数',函数(){
var mockedFactory、$rootScope、$controller;
每个模块之前(模块('my_模块',函数($provide){
模拟工厂={
保存:jasmine.createSpy()
};
$PROFECT.value(‘我的工厂’、模拟工厂);
}));
beforeach(注入(函数($rootScope,$controller){
$rootScope=\u$rootScope;
$controller=$controller;
}));
scope=$rootScope.$new();
它('应该调用save函数',函数(){
scope.my_函数();
预期(mockedFactory.save).toHaveBeenCalled();
});
}

通过这种方式,您将覆盖
我的工厂
依赖关系。

Hi@caiocnha..您正在测试哪个控制器?在哪里指定?我非常喜欢这种方法,我正在重构我的测试,但我有这个疑问
//my_test.js
describe('testing my_controller.my_function', function () {
    beforeEach(module('my_module'));

    var $rootScope, $controller;
    beforeEach(inject(function(_$rootScope_, _$controller_) {
        $rootScope = _$rootScope_;
        $controller = _$controller_;
    }));

    scope = $rootScope.$new();

    it('should call the save function', function() {
        scope.my_function();
        expect(my_data.save).toHaveBeenCalled();
    });
}