1

次の形式のコードがあります。

sut.methodtotest = param => {
    return dependency.methodcall(param)
        .then((results) => {
            return results;
        });
};

sut.methodtotest をテストしたいのですが、chai、mocha、require、sinon、および Javascript コミュニティが自由に使えるその他の多数のフレームワークを使用すると、次のようなエラーが表示されます。

dependency.methodcall(...).then is not a function

私の質問はこれです:依存関係をモックして、モックされたデータを返し、「then」関数を使用できるようにするにはどうすればよいですか?

私のテストコードは次のようになります

describe("my module", function() {
    describe("when calling my function", function() {

        var dependency =  require("dependency");

        var sut =  proxyquire("sut", {...});

        sut.methodtotest("");

        it("should pass", function() {

        });
    });
});
4

2 に答える 2

1

sinonさんのサンドボックスを使っています。

var sandbox = sinon.sandbox.create();
var toTest = require('../src/somemodule');

describe('Some tests', function() {
  //Stub the function before each it block is run
  beforeEach(function() {
    sandbox.stub(toTest, 'someFunction', function() {
      //you can include something in the brackets to resolve a value 
      return Promise.resolve();  
    });
  });
  
  //reset the sandbox after each test
  afterEach(function() {
    sandbox.restore();  
  });
  
  it('should test', function() {
    return toTest.someFunction().then(() => {
      //assert some stuff                                  
    });
  });
});

returnthen ブロックでアサーションする必要があります。たとえば、次のようにしchaiます。

return toTest.someFunction().then((result) => {
    return expect(result).to.equal(expected);                
});

さらに質問がある場合は、コメントを残してください。

于 2017-01-11T14:29:29.097 に答える
1

これを達成するためにジャスミンスパイを使用しています:

beforeEach(function() {
    //stub dictionary service
    dictionaryService = {
        get: jasmine.createSpy().and.callFake(function() {
            return { then: function(callback) {
                return callback(/*mocked data*/);
            } };
        })
    };
});

it('should call dictionary service to get data', function () {
    expect(dictionaryService.get).toHaveBeenCalledWith(/*check mocked data*/);
});
于 2017-01-11T14:38:37.530 に答える