'use strict' const ko = require('knockout') const { renderHtml } = require('../src') const { expect } = require('chai') describe('getComponentParams' , () => { afterEach(() => { ko.components.unregister('foo') }) it('can access/update component params with a function viewModel', () => { ko.components.register('foo', { template: '
', viewModel(params) { this.baz = params.baz } }) const $el = renderHtml({ template: `
`, viewModel: { bar: 'bar', baz: ko.observable('baz') } }) expect($el.find('foo')).to.exist expect($el.find('foo').getComponentParams().bar).to.equal('bar') expect($el.find('foo').getComponentParams().baz()).to.equal('baz') $el.find('foo').getComponentParams().baz('qux') expect($el.find('foo').getComponentParams().baz()).to.equal('qux') expect($el.find('foo').html()).contains('qux') ko.components.unregister('foo') }) it('can access/update component params with a class viewModel', () => { ko.components.register('foo', { template: '
', viewModel: class ViewModel { constructor(params) { this.baz = params.baz } } }) const $el = renderHtml({ template: `
`, viewModel: { bar: 'bar', baz: ko.observable('baz') } }) expect($el.find('foo')).to.exist expect($el.find('foo').getComponentParams().bar).to.equal('bar') expect($el.find('foo').getComponentParams().baz()).to.equal('baz') $el.find('foo').getComponentParams().baz('qux') expect($el.find('foo').getComponentParams().baz()).to.equal('qux') expect($el.find('foo').html()).contains('qux') ko.components.unregister('foo') }) it('can access/update component params with a factory viewModel', () => { ko.components.register('foo', { template: '
', viewModel: { createViewModel(params) { class ViewModel { constructor(p) { this.baz = p.baz } } return new ViewModel(params) } } }) const $el = renderHtml({ template: `
`, viewModel: { bar: 'bar', baz: ko.observable('baz') } }) expect($el.find('foo')).to.exist expect($el.find('foo').getComponentParams().bar).to.equal('bar') expect($el.find('foo').getComponentParams().baz()).to.equal('baz') $el.find('foo').getComponentParams().baz('qux') expect($el.find('foo').getComponentParams().baz()).to.equal('qux') expect($el.find('foo').html()).contains('qux') ko.components.unregister('foo') }) it('can access/update component params with no viewModel', () => { ko.components.register('foo', { template: '
' }) const $el = renderHtml({ template: `
`, viewModel: { bar: 'bar', baz: ko.observable('baz') } }) expect($el.find('foo')).to.exist expect($el.find('foo').getComponentParams().bar).to.equal('bar') expect($el.find('foo').getComponentParams().baz()).to.equal('baz') $el.find('foo').getComponentParams().baz('qux') expect($el.find('foo').getComponentParams().baz()).to.equal('qux') expect($el.find('foo').html()).contains('qux') ko.components.unregister('foo') }) it('can\'t access/update component params with a shared instance', () => { ko.components.register('foo', { template: '
', viewModel: { instance: {} } }) const $el = renderHtml({ template: `
`, viewModel: { bar: 'bar', baz: ko.observable('baz') } }) expect($el.find('foo')).to.exist expect($el.find('foo').getComponentParams()).to.be.undefined }) })