在试图测试承诺时,我犯了一些错误。这些测试应该失败

时间:2018-01-09 03:49:52

标签: javascript promise jasmine chai

所有这些规格即使不应该也能正常运行。请看一下延迟函数给出的荒谬答案。对不起,我试图弄清楚如何更容易地格式化代码但失败了。

测试规范:

describe("delay", function () {

  var chai = require("chai");
  var expect = chai.expect;
  var chaiAsPromised = require("chai-as-promised");
  chai.use(chaiAsPromised);

  var Calculator = require('C:/BaseCalculators/Calculator');
  var delay = require('C:/BaseCalculators/delay');
  var calculator;

  beforeEach(function () {
    calculator = new Calculator();
  });

  it("returns a promise", function () {
  var willAdd = delay( 100, calculator, 'add', [ 1, 1 ] );
  expect( willAdd ).to.be.instanceOf( Promise );
  expect( willAdd ).to.be.fulfilled;
  });

  it("delays execution", function () {
    expect( delay( 1000, calculator, 'add', [ 10, 5 ] ) ).to.eventually.equal( 150 );
    expect( delay( 500, calculator, 'subtract', [ 9, 5 ] ) ).to.eventually.equal( 14 );
    });

  it("cannot execute functions that do not exist", function () {
    expect( delay( 1000, calculator, 'sqrt', [ 2, 2 ] ) ).to.be.rejected;
  });
});

Calulator似乎可以正常运行其自己的测试,但如果需要我可以添加更多代码。这是延迟功能,我认为是问题:

    delay = function (ms, obj, methodName, params) {
  var p = new Promise((resolve, reject) => {
      setTimeout(() => {      
        var data = obj[methodName](...params);
        console.log(data);
        p.resolve(data);
      }, ms);   
    }
  )
  return p;
}; 

module.exports = delay;

1 个答案:

答案 0 :(得分:0)

这里的主要问题是我使用的是Jasmine,它显然不适合异步测试。我创建了一个新项目,复制了所有测试和js应用程序文件,并且只安装了mocha,chai和chai-as-promise,然后配置了我的package.json的这一部分,如下所示:

"scripts": {
    "test": "./node_modules/.bin/mocha --reporter spec"

之后,运行“npm test”一切都开始像魅力一样。不知道为什么我的问题的负面代表,我可以得到一些回来找到其他人可能会觉得有用的解决方案吗?