javascript - Mocha 测试: faking a method

标签 javascript mocha.js

问题

我想测试以下 javascript 文件:

function myLocalHouse() {
     this.init = function() {
        $.post(//Ajax call using jQuery);
     };

     this.buyHouse(money, date) {
       //code I want to test with mocha
     };

     this.init();
};

如您所见,init 方法使用 jQuery,当我在控制台中执行 mocha 时,为了测试它,失败了,因为它找不到 $对象。

所以我的解决方案是重写并伪造 init 方法。问题是我的尝试却惨遭失败。太悲伤了。

我尝试过的

这是我的测试,尝试测试 myLocalHouse 以及我尝试重写 init 方法以使用空函数的三次尝试。

   var myLocalHouse = require('./myLocalHouse.js').myLocalHouse;

   suite('houses suite', function() {
      test('test that buy House works correctly', function() {
         //First attemp at overriding init method: FAILED
         myLocalHouse.prototype.init = function() {};

         //Second attemp at overriding init method: FAILED
         myLocalHouse.__proto__.init = function() {};

         var myLocalHouseInstance = new myLocalHouse();

         //Third attemp at overriding init method: FAILED
         myLocalHouseInstance.prototype.init = function() {};

         var something = myLocalHouseInstance.buyHouse(100, '17/08/2013');
      });
   });

我只是...我不知道如何重写 init 方法。

我做错了什么吗?还有其他方法可以做同样的事情吗?

最佳答案

如果您不想修改旧代码中的任何内容,可以使用以下方法:

function myTestHouse() {
    Object.defineProperty(this, 'init', {
        set: function() { /* Ignore setter */ },
        get: function() { return function() { /* dummy*/}; },
        enumerable: true
    });
    var _this = myLocalHouse.apply(this, arguments);
    return _this || this;
};
myTestHouse.prototype = myLocalHouse.prototype;

// Usage
var myLocalHouseInstance = new myTestHouse();

使用Object.defineProperty ,我定义了一个只读方法,它默默地忽略 setter 。之后,我使用 apply 调用原始构造函数 (myLocalTestHouse) .

注意:此方法是完全透明的。创建的实例的行为就像您调用原始构造函数一样。

关于javascript - Mocha 测试: faking a method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16854637/

相关文章:

javascript - AMQJS0011E 无效状态未连接

javascript - 如何使用 Enzyme 等待 Mocha 中 React 组件的完整渲染?

javascript - jQuery - 同一灯箱的多个实例

javascript - 将变量从 out 函数传递到 inner 函数

javascript - 配置模拟客户端

node.js - 使用 mocha 在 Sublime 上调试 JavaScript 代码

javascript - Promise 中的处理如何在需要解析之前触发,就像 java Future 一样?

async-await - mocha async/await 测试因超时而失败

javascript - 在同一页面概念上将 javascript 变量传递给 php 变量

javascript - 无法让输入字段聚焦于点击