B
考查虚拟语气。Ought to have taken="should" have taken意为:本应该做却未做;
根据后面的but she didn’t可知这是一个与过去事实相反的虚拟语气。
应该用:情态动词+have done的形式。