나는 어떻게 든 해결할 수없는 혼동하지 않는 작동 테스트를 가지고 있습니다. (자바 배경에서오고 있습니다. 그래서 제 용어에 약간의 실수가있을 경우 미리 유감입니다.) .약속의 다른 메서드가 호출 된 경우 Sinon 확인
foo()
및 bar()
과 같은 일부 공개 기능을 가진 객체 클래스 Trigger
이 있습니다. 논리는 다음과 같습니다
하나는 다른 개체에 직접 foo()
를 호출 할 수 있습니다, 또는 bar()
이 (AN 배열로)를 호출하는 경우, 다음 Trigger.bar()
는 Trigger.foo()
사항 Array.length에게 번 호출합니다.
트리거는 블루 버드 약속으로 구현됩니다. 이 트리거의 기본 발췌이다 (나는 종류의 중복 것이와 함께, 몇 가지 논리를 삭제하지만, 훨씬 더 현실에 존재 일) : 그래서
// Will be refactored afterwards
var self;
var Trigger = function() {
self = this;
};
Trigger.prototype.bar = function bar(members) {
return new Promise(function (resolve, reject) {
Promise.map(members, function (member) {
self.foo(member)
.then(function(res){
...
})
// catch
});
});
};
Trigger.prototype.foo = function foo(member) {
return new Promise(function(resolve, reject){
doSomethingWithMember(member)
.then(function(res){
...
})
// catch
});
}
하나를 볼 수 있습니다, 각 구성원 bar()
전화 foo()
members 배열에 있습니다.
나는 트리거 객체을 스파이 검사하고 foo()
을 n 번 호출했는지 확인하고 싶습니다. 나는 현재이도 불려 갔을 경우 그냥 확인하고 위치를 (변경된 기능 이름으로) 한 그래서
:
var chai = require('chai');
var expect = chai.expect;
var sinon = require('sinon');
var sinonChai = require('sinon-chai');
chai.use(require('chai-as-promised'));
chai.use(sinonChai);
var Trigger = require(...);
var trigger = new Trigger();
...
describe("bla", function() {
it("should invoke 'foo()' n times", function() {
var spy = sinon.spy(trigger.foo);
var member = MemberBuilder.buildCorrect();
trigger.bar(member);
return expect(spy).to.have.been.called; // does not pass
})
});
이 분명히 트리거의 약속으로 인해 작동하지 않는, 따라서 나에게 말한다 :
AssertionError: expected foo to have been called at least once, but it was never called
하지만 다음 에서이 문제를 해결하려고 아무리() bar()
의 블록은 항상 내 스파이가 호출되지 않았 음을 주장하고있다.
describe("bla", function() {
it("should invoke 'foo()' n times", function() {
var spy = sinon.spy(trigger.foo);
var member = MemberBuilder.buildCorrect();
trigger.bar(member)
.then(function(){
return expect(spy).to.have.been.called; // does not pass with the same AssertionError (has not been invoked)
});
})
는 좀 로깅을 수행하고 foo()
가 호출 확신했다. 내가 뭘 잘못하고 있는지 생각해?
감사합니다, 내 (바보!) 실수를 발견