Angular工厂太棒了!在写单元测试的时候,我们要不要写单元测试,这有点让人困惑。
我有以下工厂:
(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
});
});我用的是茉莉,angular-mock,karma。
发布于 2016-02-06 03:51:01
与一般的单元测试一样,您需要通过测试来仔细检查代码的行为。因此,如果您期望在调用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来实现这一点,那么有大量的文档和示例可以让您入门,就像这里的Jasmine Spies
https://stackoverflow.com/questions/35229666
复制相似问题