javascript - 用于 jasmine/karma 测试的 angularjs 中的全局模拟对象

标签 javascript angularjs unit-testing jasmine karma-runner

我有一个正在为单元测试模拟的对象。基本上在我的测试文件中,我模拟如下:

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/

相关文章:

javascript - mootools 扩展类

javascript - 在 ionic 应用程序中发送邮件

javascript - AngularJS 搜索框中的粗体语句

angularjs - 在 $stateChangeStart 中使用 $state.go 会导致无限循环

java.lang.NoSuchMethodError : No interface method onTransitionToIdle()V 错误

javascript - 如何从本地 html 文件通过 SSL 通过 ajax 调用 web api?

javascript - 当 float 部分为空时,从 JQuery 中的输入元素获取数值不起作用

javascript - 如何从另一个 HTML 页面调用表格

javascript - 如何 Jest 从覆盖报告生成中删除快照的考虑

javascript - 无法使用 sinon 模拟护照验证 ('local' ) 方法