首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对angular工厂进行单元测试

如何对angular工厂进行单元测试
EN

Stack Overflow用户
提问于 2016-02-06 01:05:28
回答 1查看 203关注 0票数 2

Angular工厂太棒了!在写单元测试的时候,我们要不要写单元测试,这有点让人困惑。

我有以下工厂:

代码语言:javascript
复制
(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函数编写单元测试吗?如果是,我们怎样才能用茉莉花和因果报应呢?已尝试执行以下操作:

代码语言:javascript
复制
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 
  });
});

我用的是茉莉,angular-mock,karma。

EN

回答 1

Stack Overflow用户

发布于 2016-02-06 03:51:01

与一般的单元测试一样,您需要通过测试来仔细检查代码的行为。因此,如果您期望在调用doSomething()之后发生某些事情,那么您应该进行一个测试来反映这种期望。

代码语言:javascript
复制
  it('should do something', function(){
    mockMyFirstFactory.doSomething(thing);
    expect(mockMyFirstFactory.somethingBool).toBe(true);
    expect(mockMyFirstFactory.somethingDone).toBe("some value");
    expect(mockMyFirstFactory.someMethod).toHaveBeenCalled();
  });

这是我们为简单的常规设置和测试行为构建了测试的一个工厂的样本的一个片段。

代码语言:javascript
复制
    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来实现这一点,那么有大量的文档和示例可以让您入门,就像这里的Jasmine Spies

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35229666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档