如何模拟对象创建及其方法

问题描述 投票:0回答:1
new UrlBuilder(urlString).buildURL(params).getShortenedURL().then(data => {
  .....
});

如何存根对象创建并检查是否已调用[C​​0]?

我尝试过

getShortenedURL()

但是每次我运行的测试都具有:

this.urlBuilder = sinon.stub(UrlBuilder.prototype, getShortenedURL).resolves({url: '/someUrl'});

会说

assert(this.urlBuilder.getShortenedURL.called);
javascript chai sinon
1个回答
0
投票

这是单元测试解决方案:

ReferenceError: getShortenedURL is not defined

index.js

const UrlBuilder = require('./urlBuilder'); function main() { const urlString = 'https://stackoverflow.com/'; const params = {}; return new UrlBuilder(urlString) .buildURL(params) .getShortenedURL() .then((data) => data); } module.exports = main;

urlBuilder.js

class UrlBuilder { constructor(url) { this.url = url; } buildURL(params) { return this; } getShortenedURL() { return Promise.resolve('real data'); } } module.exports = UrlBuilder;

index.test.js

带有覆盖率报告的单元测试结果:

const sinon = require('sinon');
const proxyquire = require('proxyquire');
const { expect } = require('chai');

describe('60214679', () => {
  it('should pass', async () => {
    const urlBuilderInstanceStub = {
      buildURL: sinon.stub().returnsThis(),
      getShortenedURL: sinon.stub().resolves('fake data'),
    };
    const urlBuilderStub = sinon.stub().callsFake(() => urlBuilderInstanceStub);
    const main = proxyquire('./', {
      './urlBuilder': urlBuilderStub,
    });
    const actual = await main();
    expect(actual).to.be.eq('fake data');
    sinon.assert.calledWithExactly(urlBuilderStub, 'https://stackoverflow.com/');
    sinon.assert.calledWithExactly(urlBuilderInstanceStub.buildURL, {});
    sinon.assert.calledOnce(urlBuilderInstanceStub.getShortenedURL);
  });
});

源代码:60214679 ✓ should pass (2010ms) 1 passing (2s) ---------------|---------|----------|---------|---------|------------------- File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s ---------------|---------|----------|---------|---------|------------------- All files | 70 | 100 | 40 | 70 | index.js | 100 | 100 | 100 | 100 | urlBuilder.js | 25 | 100 | 0 | 25 | 3,6,9 ---------------|---------|----------|---------|---------|-------------------

© www.soinside.com 2019 - 2024. All rights reserved.