2013-05-27 3 views
2

Просто написал модуль, который захватывает текущий IOStat производственного поля, чтобы определить, работает ли он над обработкой.Процессы дочерних процессов Jasmine Node

Интересная проблема - на самом деле нет способа проверить функцию обратного вызова с помощью Jasmine; ну, по крайней мере, тот, который я нашел.

Шпионы были первыми, что пришло мне в голову, но так как оно фактически вызывает функцию напрямую, это невозможно. Конечно, я всегда мог определить эту функцию как var и сделать шпиона.

proc.exec('iostat -c | tail -n2', function(err, out, s){ 

    if(err) throw err; 

    misc(); 

} 

Единственная причина, почему я хотел бы проверить это - то, потому что я разрабатываю на машине окон, что не все из этих команд, доступных, поэтому я хотел бы, чтобы перехватить его и бросить в ожидаемый результат.

ответ

1

Вы должны следить за proc.exec и получить функцию обратного вызова из spy.mostRecentCall.args массива и вызвать в то вашей собственной личности:

spyOn(proc, 'exec') 
//run your code 
proc.exec.mostRecentCall.args[1](true) 

Поскольку это не очень удобно, вы можете использовать sinon, где вы можете создайте заглушку, которая автоматически вызовет обратный вызов с помощью stub.callsArgWith(index, args).

sinon.stub(proc, 'exec').callsArgWith(1, true); 
//run your code 
+0

Хорошо, отличная идея. Я, честно говоря, не могу поверить, что я не думал об этом - кажется, так просто. Спасибо. – Jonathan

Смежные вопросы