typescript - Jasmine 监视导入的模块( typescript )

标签 typescript jasmine

我正在尝试使用 jasmine 和 typescript 的静态方法测试一个简单的实用程序类。问题是助手类导入第 3 方库来实现目标。我需要测试这个第 3 方库是否在每种情况下都被调用。

import Helpers from '../../src/utils/Helpers';
import {parseString} from 'xml2js';



describe('Helper class', function() {
  let mockParseString: any;

  describe('xmlToJson', function() {
    beforeEach(function(done) {
      mockParseString = jasmine.createSpy('parseString', parseString);
      // spyOn(xml2js, 'parseString').and.callFake(function(xml: string, callback: (error: any, data: object) => void) {
      //
      // });

      setTimeout(() => {
        done();
      }, 1);
    })


    it('calls library to parse string', async function(done) {
      await Helpers.xmlToJson('<div></div>');

      expect(mockParseString).toHaveBeenCalled();
      done();
    })
  })
});

然后在辅助类中,我只是将回调函数包装在一个 promise 中:

import {convertableToString, OptionsV2, parseString} from 'xml2js';
export default class Helpers {
  public static xmlToJson(xml: convertableToString, options?: OptionsV2): Promise<any> {
    return new Promise((resolve, reject) => {
      if(options) {
        parseString(xml, (err, results) => {
          if(err) {
            reject(err);
          }

          resolve(results);
        });
      } else {
        parseString(xml, options, (err, results) => {
          if(err) {
            reject(err);
          }

          resolve(results);
        });
      }
    })
  }
}

我得到的错误是没有调用 spy 。我已经研究了一段时间,但还没有找到让 spy 工作的方法。也许这根本不可能。

编辑

我如何调用测试:

 ./node_modules/.bin/ts-node ./node_modules/.bin/jasmine spec/utils/Helpers-spec.ts 

最佳答案

这是对您的代码的工作测试:

import Helpers from '../../src/utils/Helpers';
import * as xml2js from 'xml2js';

describe('Helper class', function() {

  let mockParseString;

  describe('xmlToJson', function() {

    beforeAll(() => {
      mockParseString = spyOn(xml2js, 'parseString').and.callThrough();
    });

    it('calls library to parse string', (done) => {
      (async () => {
        await Helpers.xmlToJson('<div></div>');
        expect(mockParseString).toHaveBeenCalled();
      })().then(() => done());
    });
  });
});

关于typescript - Jasmine 监视导入的模块( typescript ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51791845/

相关文章:

angularjs - 使用 $validators 单元测试 Angular 表单验证

reactjs - 即使在检查对象和属性存在之后,对象也可能是 'undefined' 错误

javascript - 如何在 JsSIP 中处理音频流?

javascript - 如何在 Angularjs Controller 中使用外部 js 方法

javascript - Angular2 单元测试。检查函数是否调用 router.navigate

javascript - 如何在另一个方法中创建的对象上使用 Jasmine spy ?

javascript - 通过IPC发送时为"Object has been destroyed"

typescript - 传递给通用函数包装器(如 _.debounce)的函数的类型推断

javascript - Jasmine:在测试中忽略页面重定向

javascript - Jasmine 测试子类对象是否已通过 Knockout 订阅调用