Tôi có một lớp học AProvider
yêu cầu './b.provider'
.Proxy yêu cầu không phân lớp của tôi yêu cầu
const BProvider = require('./b.provider');
class AProvider {
static get defaultPath() {
return `defaults/a/${BProvider.getThing()}`;
}
}
module.exports = AProvider;
b.provider.js
tiếp giáp với a.provider.js
và trông giống như
global.stuff.whatever = require('../models').get('Whatever'); // I didn't write this!
class BProvider {
static getThing() {
return 'some-computed-thing';
}
}
module.exports = BProvider;
Trong thử nghiệm của tôi, tôi sử dụng proxyquire
để thử ra ./b.provider
như sau:
import { expect } from 'chai';
import proxyquire from 'proxyquire';
describe('A Provider',() => {
const Provider = proxyquire('../src/a.provider', {
'./b.provider': {
getThing:() => 'b-thing'
},
});
describe('defaultPath',() => {
it('has the expected value',() => {
expect(Provider.defaultPath).to.equal('defaults/a/b-thing')
});
});
});
Tuy nhiên khi tôi chạy thử nghiệm BProvider
được vẫn yêu cầu số thực tế './b.provider'
không phải là tài liệu gốc và tài liệu tham khảo của BProvider là global.stuff.whatever
đang ném lỗi.
Tại sao tính năng này không hoạt động?
Bạn đã thử khai báo chỉ thị proxyquire trong câu lệnh 'before' chưa? Ngoài ra, không chắc chắn nếu điều này sẽ giúp, nhưng bài viết này dường như nghĩ rằng sử dụng sinon cùng với nó là cần thiết: http://www.thoughtdelimited.org/thoughts.cpostmfm/instructing-proxyquire-to-ignore-nested-requires –
Thú vị liên kết. Tôi đã không nhận ra yêu cầu vẫn còn xảy ra mặc dù proxyquire. Trong một chiếc taxi ngay bây giờ nhưng sẽ kiểm tra một giải pháp khi tôi về nhà. Cảm ơn. –
Được rồi, tôi đã giải quyết được vấn đề và đã tìm ra một giải pháp dễ dàng mà tôi sẽ đăng bài dưới đây. Cảm ơn @ francisco.preller đã chỉ cho tôi đúng hướng. –