我有一个正在为单元测试模拟的对象。基本上在我的测试文件中,我模拟如下:
var mockObject = {
mockMethod1 : function() {return true},
mockMethod2 : function() {return true}
};
beforeEach(module('myModule') , function ($provide) {
$provide.value('realObject',mockObject);
});
我的理解是,当我在我的模块等中测试功能时......任何引用“realObject”的地方都将使用我的“mockObject”
我的问题是我制作了多个用于测试的 js 文件,我不想在每个文件中定义我的“mockObject”……我也不想在比我更多的地方维护它。
有没有办法将我的“mockObjact”移动到一个单独的文件中,该文件包含在 karma.conf.js 中,这将使“mockObject”可用于注入(inject)到我的任何测试文件中......我正在考虑你如何注入(inject) $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);
});
});
参见 fiddle here
关于javascript - 用于 jasmine/karma 测试的 angularjs 中的全局模拟对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22869822/