У меня есть класс, который имеет несколько свойств, устанавливается следующим образом:Should.js сравнить свойства Объекта с использованием containsDeep
var MyClass = function(opts) {
var self = this
// orgId and appId are required
self.orgId = ok(arguments).getIfExists('0') || ok(opts).getIfExists('orgId') || ok(config).getIfExists('orgId')
self.appId = ok(arguments).getIfExists('1') || ok(opts).getIfExists('appId') || ok(config).getIfExists('appId')
... etc.
return self
}
Я создаю общий экземпляр этого класса, как так:
var SharedInstance = {
initSharedInstance: function(opts) {
Object.setPrototypeOf(SharedInstance, new MyClass(opts))
}
}
Это работает довольно хорошо.
Я пишу некоторые тесты, которые сравнивают свойства тем, в конфигурационном файле, чтобы убедиться, что при инициализации свойства совпадают:
it('SharedInstance\'s properties should match those defined in config.json', function() {
SharedInstance.orgId.should.equal(config.orgId)
SharedInstance.appId.should.equal(config.appId)
SharedInstance.clientId.should.equal(config.clientId)
SharedInstance.clientSecret.should.equal(config.clientSecret)
SharedInstance.baseUrl.should.equal(config.baseUrl)
SharedInstance.tokenTtl.should.equal(config.tokenTtl)
SharedInstance.authFallback.should.equal(config.authFallback)
})
Чтобы сделать это более кратким и масштабируемым, я хотел бы быть в состоянии использовать should.js «s containsDeep
вместо:
it('SharedInstance\'s properties should match those defined in config.json', function() {
SharedInstance.should.deepContains(config)
})
проблема заключается в том, что единственное свойство, которое существует на SharedInstance
непосредственно является initSharedInstance
. Я пробовал по сравнению с SharedInstance.prototype
и SharedInstance.constructor
, но не работает. Как я могу захватить свойства прототипа, определенные на родительском MyClass
, чтобы разрешить этот тест?