-
Notifications
You must be signed in to change notification settings - Fork 7
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add 309: Test flexdashboard tab and page management with {bslib} #155
Conversation
inst/apps/309-flexdashboard-tabs-navs/tests/testthat/test-shinytest2.R
Outdated
Show resolved
Hide resolved
} | ||
|
||
expect_test_element_hidden <- function(app, test_id) { | ||
expect_false(app$get_js(is_test_element_visible(!!test_id))) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since these tests are essentially purely client-side, it'd probably faster/better to use {shinyjster}
instead of {shinytest2}
, for example:
shinycoreci/inst/apps/187-navbar-collapse/app.R
Lines 10 to 45 in fb236b8
jster <- shinyjster::shinyjster_js( | |
" | |
var jst = jster(0); | |
jst.add(Jster.shiny.waitUntilStable); | |
jst.add(function() { | |
var toggle = $('.navbar-toggle:visible'); | |
var nav = $('.navbar-collapse:visible'); | |
Jster.assert.isEqual(toggle.length, 1, 'Failed to find collapsible menu, does the window need to be resized?'); | |
Jster.assert.isEqual(nav.length, 0, 'The collapsible navbar should not be visible by default'); | |
toggle.click(); | |
}); | |
// wait for nav to open | |
jst.add(function(done) { | |
var wait = function() { | |
if ($('.navbar-collapse:visible').length > 0) { | |
done(); | |
} else { | |
setTimeout(wait, 5); | |
} | |
} | |
wait(); | |
}); | |
jst.add(function() { | |
Jster.assert.isEqual( | |
$('.navbar-collapse:visible').length, 1, | |
'Clicking the navbar toggle should make the navbar appear.' | |
); | |
}); | |
jst.test(); | |
" | |
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@schloerke Is shinyjster designed to facilitate running and testing R Markdown Shiny apps using runtime: shiny
? (I couldn't find anything in the docs.)
It seems like the biggest advantage of using shinyjster would be to test in Chrome, Edge, and Firefox. From looking at the logs of previous runs, though, and unless I'm misunderstanding them, I would expect switching to shinyjster to increase the test time for these tests. Right now, they take ~7 seconds locally on my M1 for all three Bootstrap variants. With shinyjster we'd be adding two more browsers into the matrix.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
{shinyjster}
can run inside Rmd docs. Ex:
shinycoreci/inst/apps/185-report-theme/index.Rmd
Lines 135 to 174 in fb236b8
```{r} | |
## `{shinyjster}` note: | |
# From https://github.com/rstudio/shiny/issues/3780, we must delay the underlying initial | |
# call to `Shiny.setInputValue("jster_initialized", true)` due to changes in https://github.com/rstudio/shiny/pull/3666. | |
# Current stance is that https://github.com/rstudio/shiny/issues/3780 will not be resolved, so we must make a work around. | |
# This is done by delaying the initial call to `Shiny.setInputValue("jster_initialized", true)` | |
# by using a dynamic UI that is invalidated on the first draw, and then actually rendered on the second draw. | |
renderUI({ | |
shinyjster::shinyjster_js( | |
" | |
var jst = jster(); | |
jst.add(Jster.shiny.waitUntilStable); | |
jst.add(function(done) { | |
var wait = function() { | |
var txt = $('#status').get(0).textContent; | |
if ( | |
typeof txt == 'string' && | |
txt.length > 0 && | |
(txt.match(new RegExp('Pass|Fail')) ?? '').length > 0 | |
) { | |
done(); | |
return; | |
} | |
setTimeout(wait, 100); | |
} | |
wait(); | |
}) | |
jst.add(function() { | |
Jster.assert.isEqual( | |
$('#status').text().trim(), | |
'Pass' | |
) | |
}) | |
jst.test(); | |
" | |
) | |
}) | |
shinyjster::shinyjster_server(input, output) | |
``` |
Yes, it's reasonable that the time would be increased, but it is not by a large factor. I'd be comfortable using shinyjster.
inst/apps/309-flexdashboard-tabs-navs/tests/testthat/test-shinytest2.R
Outdated
Show resolved
Hide resolved
Co-authored-by: Carson Sievert <[email protected]>
Does this really matter though since |
Yeah I think this is all set to merge and fine to merge ahead of rstudio/bslib#501. |
Adds an app for testing tab and page management that rely on Bootstraps Tab plugin, as managed by bslib, over Bootstrap version 3, 4 and 5.
data-bs-toggle
is present in the BS3 tabset compatibility shims bslib#501Fixes #154