javascript - Jasmine - 如何编写自定义匹配器来求和两个数字?

标签 javascript jasmine

我正在使用 Jasmine 2.1.3 并尝试创建一个自定义匹配器来对两个数字求和。

但是我得到:

Expected 24 not to equal 12

到目前为止我已经

it("is 24 for 24", function() {
  result = simpleMath.sum_of(12,12); // gets 24
  expect(result).toBeSumOf([12,12]);
}); 

  beforeEach(function() {
    simpleMath = new SimpleMath();
    jasmine.addMatchers({
      toBeSumOf: function (util, customEqualityTesters) {
        return {
          compare: function(actual, expected) {
            // var passed = actual == expected  // comparison example that worked
            var passed = (actual[0]+actual[1]) == expected;
            return {
              pass: passed,
              message: 'Expected ' + actual + (passed ? '' : ' not') + ' to equal ' + expected
            };
          }
        };
      }
    });
  });

最佳答案

您的实际和预期是错误的,只需添加:

console.log(actual);
console.log(expected);

对于您的匹配器,您将看到,您可以使用参数 12, 12 或 [12, 12] 的任一格式,但对于前者,您需要添加另一个参数,因此数组格式可能更可取。如果有助于更复杂的比较/匹配器,您当然可以使用对象。

工作(基于数组)示例:

describe("My custom test", function() {
  it("should work", function() {
      var result = 12 + 12;
      expect(result).toBeSumOf([12, 12]);
  });
});

和:

beforeEach(function () {
  jasmine.addMatchers({
    toBeSumOf: function () {
      return {
        compare: function (actual, expected) {

            var passed = (actual == expected[0] + expected[1]);
            return {
              pass: passed,
              message: 'Expected value ' + (expected[0] + expected[1]) + (passed ? '' : ' not') + ' equal to ' + actual
            };
        }
      };
    }
  });
});

给予:

Pass!

更改其中一个值会给出:

Fail!

关于javascript - Jasmine - 如何编写自定义匹配器来求和两个数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44071365/

相关文章:

java - 使用 LoadData 时在 WebView 中运行 Javascript

javascript - 如何监视静态生成器函数?

javascript - Jasmine 测试在测试运行中、Firefox/Chrome 之间以及检查器打开/关闭时的结果不一致

javascript - Karma Jasmine 测试总是失败,并在第 9 行显示堆栈跟踪

javascript - 如何编写 Jasmine 自定义匹配器

JavaScript 编码

javascript - 长轮询 : Why do some messages come in twice?

javascript - Node.js 同步加载 JS 变量的最佳方式

javascript - 带有父变量的 Angular 单元测试观察者

javascript - Tizen SDK : Can't find variable: tizen