No articles match
Getting started with shinytest24 months ago
Why test Shiny applications? | How testing works with shinytest2 | Getting started | Recording tests | Running tests | Subsequent test runs | Multiple test scripts | Interactive R Markdown documents | Randomness | One .Rmd file per directory | Prerendered Shiny documents | Next
Frequently Asked Questions4 months ago
What does it mean when I run test_app() and it says, "Server did not update any output values within 3 seconds"? | Some input values are not set right after calling app$set_inputs(). How do I wait for them? | How can my app detect if it's running in {shinytest2}? | How can I get the objects from files in my the R folder into the testing environment? | Can I modify the input and output values that are recorded in snapshots? | Should I manually shut down my AppDriver? | How can I open the test to see if bookmarks are working?
Using shinytest2 with R packages4 months ago
Applications defined in another file | Applications using a function | Application objects | Understanding app support files: local_app_support() and friends | When do you need these functions? | Which function should you use? | Benefits of using these functions | Other setup steps | How should I test multiple applications? | Migrating from shinytest v0.4.0 to v0.5.0 | Continuous integration
Auditing Shiny apps4 months ago
Audit Shiny apps with | Introduction | Load testing with | Launch the background app | Connect Chrome | Replay with shinycannon | Report generation | Automating with GitHub Actions
Monkey testing4 months ago
Monkey (headless) testing with | Initialize the driver | Injecting gremlins.js | Easy way | Local way | Unleash the horde | A bit about gremlins.js | Practice | Blind run | Optimized testing
Robust testing4 months ago
Expectations | Confirm the expected behavior | Assert as little unnecessary information | Write clear, direct tests | {shinytest2} expectations | input/output names | Shiny values: | Downloads | UI expectations | UI visual expectations | Suggested approaches | Exported values | Snapshots vs values | Example | Cliffs Notes | Retrieving values | Expectation methods
Testing in depth4 months ago
Customizing test scripts | Setting inputs with app$set_inputs() and app$click() | Making expectations | Exported values | Adding delays | Controlling random values | Widgets | Tabs | Uploading files | View the headless browser | Getting input, output, and export values | Waiting for an input (or output) value | Dealing with dynamic data | Using variant to expect different snapshots | Limitations | Inputs without input bindings | Input component(s) provided as variable(s) | Next
Advanced future and promises usage11 months ago
The problem with future()+promise() | The solution: future_promise()
An informal introduction to async programming11 months ago
Case study: converting a Shiny app to async11 months ago
Motivation | Our source data | A tour of the app | The implementation | User interface | Server logic | Improving performance and scalability | Converting to async | Loading promises and mirai | The data reactive: mirai() all the things | The whales reactive: simple pipelines are simple | The whale_downloads reactive: reading from multiple promises | Promises: the Gathering | The total_downloaders value box: simple pipelines are for output, too | The biggest_whales plot: getting untidy | Revisiting the data reactive: progress support | Measuring scalability | Load testing with Shiny (coming soon) | Sync vs. async performance | Further optimizations | Summing up
Combining promises11 months ago
Gathering | Nesting | Racing | Mapping | Reducing
Launching tasks with mirai11 months ago
How mirai works | Choosing a launch method | Caveats and limitations | Globals: Providing input to mirai code chunks | Package loading | Custom Data Types | Native resources | Mutation | Returning values
Using promises with Shiny11 months ago
Adding prerequisites | Identifying slow operations | Converting a slow operation into a mirai | Shiny-specific caveats and limitations | Integrating promises with Shiny | Outputs | Render functions with side effects: renderPrint and renderPlot | Observers | Reactive expressions | The flush cycle
Working with promises in R11 months ago
Async programming in R | Promises: the central abstraction of async programming | Accessing results with then | Promise chaining | Tee operator | Error handling | Catching errors with onRejected | Default onRejected behavior | Syntactic sugar for onRejected | Error tee | Cleaning up with finally
Launching tasks with future12 months ago
How future works | Choosing a launch method | Caveats and limitations | Globals: Providing input to future code chunks | Package loading | Native resources | Mutation | Returning values
Using shinytest2 with continuous integration3 years ago
Overview | A repository with a single application | check-app.yaml | renv.lock, renv/activate.R, .Rprofile | Running the first build | A repository with multiple applications | Testing applications in a package | Frequently asked questions | How do I add a status badge to my project? | How do I use a DESCRIPTION file instead of {renv}? | Example workflows
Why use promises?3 years ago
What are promises good for? | What aren't promises good for?
Shiny Reactlog4 years ago
Background | The reactive life cycle | A reactive graph | A session begins | Execution begins | Reading a reactive expression | Reading an input | Reactive expression completes | Observer completes | The next observer executes | Execution completes, outputs flushed | An input changes | Notifying dependents | Removing relationships | Re-execution | Hello Reactlog | Reactlog in detail | Status Bar | Progress Bar | Current step | Navigation Buttons | Search Bar | Dependency Graph | Reactive States | Highlighting and filtering | Zooming | Labeling nodes | Learn more
Migrating from shinytest4 years ago
Code structure | Methods | ShinyDriver$click() | ShinyDriver$executeScript() | ShinyDriver$executeScriptAsync() | ShinyDriver$getAllValues() | ShinyDriver$getValue() | ShinyDriver$getUrl() | ShinyDriver$setInputs() | ShinyDriver$getWindowSize(), ShinyDriver$setWindowSize() | ShinyDriver$checkUniqueWidgetNames() | Snapshots | ShinyDriver$snapshotInit() | ShinyDriver$snapshot() | ShinyDriver$takeScreenshot() | ShinyDriver$snapshotDownload() | ShinyDriver$stop() | ShinyDriver$uploadFile() | ShinyDriver$waitFor() | ShinyDriver$waitForShiny() | ShinyDriver$waitForValue() | Elements / Widgets | ShinyDriver$findElement(), ShinyDriver$findElements(), ShinyDriver$findWidget() | ShinyDriver$getSource(), ShinyDriver$getTitle() | Testing setup | ShinyDriver$getRelativePathToApp(), ShinyDriver$getTestsDir() | ShinyDriver$getSnapshotDir() | ShinyDriver$expectUpdate() | Debugging | Other removed methods