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
Choosing which Chrome-based browser to use1 years ago
Use any version of Chrome or chrome-headless-shell with chromote | Using a Chrome-based browser that you installed
Chrome on remote hosts1 years ago
Commands and events1 years ago
Commands and Events | Automatic Events
Extracting text from a web page1 years ago
Using JavaScript | Synchronous version | Asynchronous version | Using Chrome DevTools Protocol commands
Loading a page reliably1 years ago
Setting custom headers1 years ago
Setting custom user agent1 years ago
Synchronous version | Asynchronous version
Synchronous vs. asynchronous usage1 years ago
Why use async? | Async commands | Turning asynchronous code into synchronous code | Async events
Taking a screenshot of a web page1 years ago
Setting width and height of the viewport (window) | Taking a screenshot of a web page after interacting with it | Taking screenshots of web pages in parallel
Websites that require authentication1 years ago
Method 1: Manually interact with the page | Method 2: Capture and re-use cookies
Using chromote in CRAN tests1 years ago
chromote1 years ago
Creating new tabs and managing the process | Commands and Events | The Chromote object model | Debugging | Resource cleanup and garbage collection
Attaching to existing tabs1 years ago
Why pool?2 years ago
One connection per app | One connection per query | Pool: the best of both worlds
Overview of the sass R package2 years ago
Why Sass? | Sass Basics | Variables | Functions | Importing | Font imports | Mixins | More basics | Composable sass | Resolving relative imports | Attaching HTML dependencies | CSS output options | Output to a file | Compression | Source maps | Caching | In shiny | As a string | As a file | As a dynamic input | In rmarkdown
Introduction to HTML Widgets3 years ago
Overview | Example (sigma.js) | File layout | Dependencies | R binding | JavaScript binding | Demo | Creating your own widgets | Requirements | Scaffolding | Learning more | Additional articles | Examples | Questions and issues
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
HTML Widgets: Advanced Topics6 years ago
Overview | Data transformation | HTMLWidgets.dataframeToD3() | HTMLWidgets.transposeArray2D() | Custom JSON serializer | Passing JavaScript functions | Custom widget HTML
HTML Widget Sizing6 years ago
Overview | Specifying a sizing policy | Examples | Available options | JavaScript resize method | dygraphs | forceNetwork
An Introduction to the DT Package6 years ago
Overview6 years ago
Creating WebSockets | Interaction with later | Adding handlers | Event environment | Removing handlers | Other notes
Using later from C++9 years ago
Executing a C function later | Background tasks