Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.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

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
Angularjs 如何为角工厂进行单元测试_Angularjs_Unit Testing_Jasmine_Karma Jasmine - Fatal编程技术网

Angularjs 如何为角工厂进行单元测试

Angularjs 如何为角工厂进行单元测试,angularjs,unit-testing,jasmine,karma-jasmine,Angularjs,Unit Testing,Jasmine,Karma Jasmine,角工厂很棒!!在编写单元测试时,我们是否应该编写单元测试有点困惑 我有以下工厂: (function(myApp) { myApp.factory('MyFirstFactory', function(MySecondFactory){ function MyFirstFactory(config){ this.value1 = 'value1'; setDefault(this); } MyFirstFactory.doSomething = function(

角工厂很棒!!在编写单元测试时,我们是否应该编写单元测试有点困惑

我有以下工厂:

(function(myApp) {
myApp.factory('MyFirstFactory', function(MySecondFactory){
  function MyFirstFactory(config){
    this.value1 = 'value1';
    setDefault(this);
  }

   MyFirstFactory.doSomething = function(){
     var config = {
       findWork: true;
       myWork: MySecondFactory.doWork()
     };
     return new MyFirstFactory(config);
   };

  return MyFirstFactory;
});
})(angular.module('MyModule'));
所以对于上述工厂,我们需要为MyFirstFacotry和doSomething函数编写单元测试吗? 如果是,我们如何利用茉莉花和因果报应来实现。。尝试了以下内容:

describe('MyFirstFactory', function() {
   var mockMyFirstFactory;
   beforeEach(function(){
     module('MyModule');
     inject(function(MyFirstFactory){
        mockMyFirstFactory = MyFirstFactory;
     });
   });

  it('MyFirstFactory should be defined', function(){
     expect(mockMyFirstFactory).toBeDefined();
  });
  it('should do something', function(){
    // how to test doSomething 
  });
});

我使用的是jasmine、angular mock和karma。

与所有单元测试一样,您通过测试仔细检查代码的行为。因此,如果您在调用
doSomething()
后预期会发生某些事情,则应该进行一次测试以反映该预期

  it('should do something', function(){
    mockMyFirstFactory.doSomething(thing);
    expect(mockMyFirstFactory.somethingBool).toBe(true);
    expect(mockMyFirstFactory.somethingDone).toBe("some value");
    expect(mockMyFirstFactory.someMethod).toHaveBeenCalled();
  });
下面是我们的一个工厂的一个示例片段,我们为其构建了简单的通用设置和测试行为测试

    describe('imageUploader.imageModel module', function () {
        // VARIABLES
        var imageModel, imageModelFactory, $rootScope, sharedDataService;
        // INJECT AND SETUP DEPENDENCIES
        beforeEach(module('imageModel'));

        beforeEach(inject(function (_$rootScope_, $injector, _imageModelFactory_) {
            $rootScope = _$rootScope_;
            sharedDataService = $injector.get('sharedDataService');
            imageModelFactory = _imageModelFactory_;
            spyOn($rootScope, '$apply');
        }));
        // SET UP MOCK DATA
        beforeEach(function () {
            sharedDataService.metadata = [{metadataItemOne: "one", metadataItemTwo: "two"}];
            var loadedData = {
                name: 'test_name.jpg',
                target: {
                    result: 'fakedata12345'
                }
            };
            var fake_file = {
                data: "fakedata12345",
                fileName: loadedData.name,
                fileType: "image",
                fileSize: 1024,
                fileDate: "7-7-2015"
            };
            imageModel = imageModelFactory(fake_file, loadedData);
        });
        // TEST BEHAVIOR
        it('can get an instance of imageModelFactory', function () {
            expect(imageModelFactory).toBeDefined();
        });
        it('can instantiate an instance of imageModel', function () {
            expect(imageModel).toBeDefined();
        });
        it('can set upload state', function () {
            imageModel.setUploaded(true);
            expect(imageModel.isUploaded).toBe(true);
            expect(sharedDataService.imagesSucceeded).toBe(1);
            imageModel.setUploaded(false);
            expect(imageModel.isUploaded).toBe(false);
            expect(sharedDataService.imagesSucceeded).toBe(0);
            expect(imageModel.RelatedToUpload).toHaveBeenCalled()
        });
    }

如果你想知道的只是如何使用Jasmine,那么有很多文档和示例可以让你开始,就像这里一样

谢谢你的解释。在我的示例中,我想知道如何设置spy来测试在测试MyFirstFactory.doSomething时是否调用了MySecondFactory.doWork()方法。