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()方法。