【问题标题】:When using Mocha and chai, when to wrap expectation with a function?使用 Mocha 和 chai 时,什么时候用函数包裹期望?
【发布时间】:2023-04-10 21:02:01
【问题描述】:

对于抛出异常的代码,我需要将期望包装在一个匿名函数中。否则在 Mocha 捕捉到它之前会抛出异常。 请参阅此 StackOverflow answer

但包装似乎有副作用。
以下代码在包装时表现不同。这似乎是一个 Chai 问题。

chai = require 'chai'
expect = chai.expect

describe 'Weird', ->

  obj =
    name: 'kalle'

  it 'not wrapped', () ->
    expect(obj).to.have.property 'name', 'kalle'

  it 'wrapped', () ->
    expect(->obj).to.have.property 'name', 'kalle'

我手工制作的 Javascript 版本:

var expect = require('chai').expect;

describe('Weird', function() {
    obj = {name: 'kalle'};

    it('not wrapped', function() {
      expect(obj).to.have.property('name', 'kalle');
    });

    it('wrapped', function() {
        expect(function() {return obj}).to.have.property('name', 'kalle');
    });
});

失败看起来像这样:
AssertionError: expected [Function] to have a property 'name' of 'kalle', but got ''

Weird
    ✓ not wrapped 
    1) wrapped


  1 passing (10ms)
  1 failing

  1) Weird wrapped:

      + expected - actual

      +kalle

为什么包装会产生不同的结果?
提前致谢!

【问题讨论】:

  • 是在 javascript 和 coffeescript 版本中都失败了,还是在 CS 版本中失败了?
  • @JedSchneider:都失败了。
  • 我预料到了。我将在下面提供答案。

标签: javascript coffeescript mocha.js chai


【解决方案1】:

在这两种情况下,您都将函数作为参数传递,而不是函数的结果。我希望 mocha 在您调用 to.throw 时实际调用该函数,就像在链接的 SO 答案中所做的那样。为了解决这种情况下的函数,您需要实际调用您期望的函数:

expect(->obj()).to.have.property 'name', 'kalle'

【讨论】:

  • 我猜答案是:当期待异常时,包装函数调用;否则不要。感谢@Jed 的努力。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-28
  • 1970-01-01
  • 2016-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多