【问题标题】:Jasmine can't run specs inside Javascript prototype methodsJasmine 无法在 Javascript 原型方法中运行规范
【发布时间】:2015-07-16 19:35:33
【问题描述】:

我刚开始使用 Jasmine 对我的 JavaScript 代码进行单元测试,我发现如果我通过 describe()it() 在对象的原型方法中定义一个套件或规范,它是'不被识别为 SpecRunner html 页面上的规范。

有没有办法解决这个问题?因为我所有的代码都是通过原型对象/方法编写的,如果我无法在其中进行测试,那么我就无法测试任何东西,而且 Jasmine 对我来说几乎毫无用处。另外,如果没有,是否有任何好的 JS 单元测试框架可以在原型方法/等中工作?

【问题讨论】:

  • 听起来您是在说您无法运行规范定义在原型方法中,而不是您无法运行规范关于原型方法。对吗?

标签: javascript unit-testing jasmine prototype


【解决方案1】:

您可以使用 jasmine 轻松测试对象原型上定义的方法。考虑一个基本的 Person 对象。

function Person(name)
{
  this._name = name;
}

Person.prototype.getName = function()
{
  return this._name;
};

要测试 getName 函数,请使用以下代码。

describe('Person test suite', function()
{
  it('tests getName', function()
  {
    var p = new Person('Joe');
    expect(p.getName()).toBe('Joe');
  });
});

您还可以监视对象原型上的方法。例如。

spyOn(Person.prototype, 'getName');
// Call the method.
expect(Person.prototype.getName).toHaveBeenCalled();

希望对您有所帮助。

【讨论】:

  • 这个问题是我必须创建一个对象的新实例来测试该特定对象的方法/等。我想测试已经通过其他方式实例化的那些,所以我可以测试以确保它们的值正在更新等。我不能用我创建的与其余部分无关的测试对象来执行此操作我的代码。
  • @flysaiah 您能否更具体地说明对象是如何被实例化的?一个笨拙的人会很有帮助。是否可以在测试中创建组合对象的实例,例如在 beforeEach() 中?组合对象如何暴露您要测试的对象?顺便说一句,如果可能,通常应该对对象进行测试。这使得单元测试更容易。这是开发人员强调依赖注入的主要原因之一(IMO)(也​​是控制模式反转的主要原因)。
  • 我明白你在说什么。我以前从未做过单元测试,现在我发现我对它的想法是完全有缺陷的。感谢您对此的见解。
猜你喜欢
  • 1970-01-01
  • 2014-09-08
  • 1970-01-01
  • 2017-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-20
  • 1970-01-01
相关资源
最近更新 更多