Mah*_*hdi 1 integration-testing jasmine angularjs
我有一个AngularJS服务,通过$ http这样调用服务器
function DefineCourseService($http) {
var service = {
getCourses: getCourses
};
function getCourses(id) {
return $http({
url: '/api/Course',
method: 'GET'
});
}
}
Run Code Online (Sandbox Code Playgroud)
并且服务器返回:
[{Code:'123',Title:'Test'}]
Run Code Online (Sandbox Code Playgroud)
我想使用Jasmine编写一个集成测试,它从服务器获取响应并检查其值.测试文件如下:
(function() {
'use strict';
define(['angular-mocks', 'defineCourse.service'], function() {
describe("Course service", function() {
var courseService, data, deferredResolution, parentScope;
beforeEach(function() {
module('modabber.services');
});
beforeEach(inject(function($q, $rootScope, DefineCourseService) {
courseService = DefineCourseService;
deferredResolution = $q.defer();
parentScope = $rootScope;
}));
it("get courses", function() {
spyOn(courseService, 'getCourses').and.callThrough();
deferredResolution.resolve();
courseService.getCourses().then(function(result) {
data = result;
});
expect(courseService.getCourses).toHaveBeenCalled();
expect(data).toBeUndefined();
parentScope.$digest();
expect(data).toBeDefined();
done();
});
});
});
})();
Run Code Online (Sandbox Code Playgroud)
最后我的karma.conf.js:
module.exports = function(config) {
config.set({
basePath: '../',
frameworks: ['jasmine', 'requirejs'],
files: [
'karma/test-main.js', {
pattern: 'WebApiControllers/**/*.js',
included: false
}, {
pattern: 'scripts/vendor/*.js',
included: false
}, {
pattern: 'bower_components/ngMidwayTester/src/ngMidwayTester.js',
included: false
}, {
pattern: 'bower_components/**/*.min.js',
included: false
}, {
pattern: 'scripts/*.js',
included: false
}, {
pattern: 'app/services/*.js',
included: false
}, {
pattern: 'app/directives/*.js',
included: false
},
],
exclude: ['scripts/main.js'],
preprocessors: { },
reporters: ['progress'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false
});
}Run Code Online (Sandbox Code Playgroud)
但它始终失败,因为"数据"未定义,那么问题是什么?
angular-mock不会进行真正的ajax调用,因为它可能使单元测试不准确.为了让Angular调用Web服务并仍然能够保持良好的测试,我建议使用ngMidwayTester.将它与Jasmine的异步支持(done()功能)相结合,您可以执行测试.
describe('Course service', function() {
var tester;
var courseService;
beforeEach(function() {
tester = ngMidwayTester('modabber.services');
courseService = tester.inject('DefineCourseService');
});
afterEach(function() {
tester.destroy();
tester = null;
});
it('get courses', function(done) {
courseService.getCourses()
.then(function(result) {
expect(result).toBeDefined();
expect(result.Code).toBe('123');
done();
}, function() {
done.fail('Web service call failed!');
});
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1313 次 |
| 最近记录: |