I am trying to test some of the functions I have written for my dash app. Not the actual component yet. Here is one of my functions:
import base64 import io from typing import Any import pandas as pd def parse_contents(contents: str, filename: str) -> Any: """ This function takes the contents of the csv or xls file in a string and decodes it using StringIO then places it in a pandas dataframe then it returns a html.Div of a datatable and a list of rows content with the attributes in a dictionary Args: contents: a string of the data within the csv file filename: a string of the filename Returns: """ df = pd.DataFrame content_type, content_string = contents.split(",") decoded = base64.b64decode(content_string) try: if "csv" in filename: # Assume that the user uploaded a CSV file df = pd.read_csv(io.StringIO(decoded.decode("utf-8"))) elif "xls" in filename: # Assume that the user uploaded an Excel file df = pd.read_excel(io.BytesIO(decoded)) except Exception as e: print(e) return  return df.to_dict("records")
I am used to creating a temporary file, creating a simple test dataframe to test my functions but here I am not sure how do I simulate the way that the upload function puts the file data into a string… my callback function uses this function to process the file and then stores it. So I am wondering how do I simulate dcc.upload in my test so that the this parse_contents function can be tested?