Des*_*xia 10 javascript unit-testing jasmine angularjs karma-runner
我有一个对象,我正在嘲笑单元测试.基本上在我的测试文件中,我将其模拟如下:
var mockObject = {
mockMethod1 : function() {return true},
mockMethod2 : function() {return true}
};
beforeEach(module('myModule') , function ($provide) {
$provide.value('realObject',mockObject);
});
Run Code Online (Sandbox Code Playgroud)
我理解它的方式是,当我在我的模块中测试功能等...引用"realObject"的任何地方都将使用我的"mockObject"
我的问题是我已经制作了多个js文件进行测试,我不想在每一个中定义我的"mockObject"...我也不想在比我更多的地方维护它.
有没有办法将我的"mockObjact"移动到一个单独的文件中,该文件包含在karma.conf.js中,这将使"mockObject"可用于注入我的任何测试文件.....我想的是你如何注入$ rootScope
如果它是在特定套件的上下文之外编写但仍由Jasmine执行,则可以创建全局beforeEach函数,例如,创建一个自定义文件以由Karma加载并在那里编写您的beforeEach函数,而不将其封闭在describe函数中.
例:
var myGlobal;
beforeEach(function() {
// This will run before any it function.
// Resetting a global state so the change in this function is testable
myGlobal = 10
});
describe('first suite', function(){
it('is a test', function(){
expect(myGlobal).toBe(10);
// Set the value to show that beforeEach is executed for each it function
myGlobal = 20;
expect(myGlobal).toBe(20);
});
it('is another test', function(){
expect(myGlobal).toBe(10);
myGlobal = 30;
expect(myGlobal).toBe(30);
});
});
describe('second suite', function(){
it('is a test', function(){
expect(myGlobal).toBe(10);
});
});
Run Code Online (Sandbox Code Playgroud)
请看这里的小提琴
您可以构建一个包含模拟的服务,并将该服务注入每个测试文件中。
beforeEach(inject(function($rootScope, $controller, yourMockSvc) {
appScope = $rootScope.$new();
appCtrl = $controller('AppController', {
$scope: appScope,
yourSvc: yourMockSvc
});
}));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12217 次 |
| 最近记录: |