javascript - 在 javascript 中编写单元测试函数的更好方法是什么

标签 javascript

在 javascript 中,相同的函数可以用不同的方式编写,例如以下。哪种方式最适合单元测试场景

 // 1st way ============ 
var app = {};
app.name = "abc"
app.init = function () {
    return "test";
};

// 2nd way ============
function app() {
    this.name = "abc";
};
app.prototype.init = function () {
    return "test";
};

最佳答案

这都很容易测试:

// 1st way
assert.equal(app.name, 'abc')
assert.equal(app.init(), 'test')

// 2nd way
var appInstance = new app()
assert.equal(appInstance.name, 'abc')
assert.equal(appInstance.init(), 'test')

但是,在“第二种方式”中,应用程序应该大写(因为构造函数应该以大写开头)。

“第一种方法”可能有点难以测试,因为 var app 必须作为全局变量导出,并且很难再次编写可变全局对象的测试(副作用)。

因此我建议使用“第二种方式”,因为您可以通过在 beforeEach 中(重新)调用 ctor 来创建一个干净的测试设置(当使用摩卡):

describe('the app'', function() {
  var app
  beforeEach(function() {
    app = new App()
  })

  it(...)
  it(...)
})

如果您不喜欢原型(prototype),可以采用这种方式来实现同样良好的可测试性

var createApp = function() {
  var app = {};
  app.name = "abc"
  app.init = function () {
   return "test";
  };
  return app;
}

关于javascript - 在 javascript 中编写单元测试函数的更好方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36839588/

相关文章:

javascript - 使用 JavaScript 的范围选择器

javascript - 简单的 PIN 验证

javascript - 滚动一段距离后删除 JavaScript 中的固定位置

javascript - 在 Sequelize 中从关联创建复合主键

javascript - 将 CoffeeScript 与 cypress.io 结合使用

javascript - Couchdb 对带有字符串的大型文档的 View 作为键超时

javascript - 使 hover resize 元素只影响元素

javascript - 如何在 JavaScript 中计算 Plaid API 交易数组的值之和?

javascript - 如何使用集群 (clusterer) 图标打印 Google map ?

javascript - Google TableChart 与页面上的其他图表不能很好地配合