sasjs-tests
is a test suite for the SASjs adapter.
It is a React app bootstrapped using Create React App and @sasjs/test-framework.
When developing on @sasjs/adapter
, it's good practice to run the test suite against your changed version of the adapter to ensure that existing functionality has not been impacted.
You can use the provided update:adapter
NPM script for this.
npm run update:adapter
This scripts builds a new version of the adapter and installs it in the sasjs-tests
project.
There are three prerequisites to be able to run the tests:
- Correct server configuration for the SASjs adapter.
sasjs-tests
deployed to your SAS server.- The required SAS services created on the same server.
There is a config.json
file in the /public
folder which specifies the configuration for the SASjs adapter. You can set the values within the sasjsConfig
property in this file to match your SAS server configuration.
There is a deploy
NPM script provided in the sasjs-tests
project's package.json
.
It updates sasjs-tests
to use the latest version of the adapter, and deploys to a specified server via SSH using the rsync
command.
To be able to run the deploy
script, two environment variables need to be set:
SSH_ACCOUNT
- your SSH account, this is of the form [email protected]DEPLOY_PATH
- the path on the server wheresasjs-tests
will be deployed to, typically/var/www/html/<some-subfolder>
.
So you can run the script like so:
[email protected] DEPLOY_PATH=/var/www/html/my-folder/sasjs-tests npm run deploy
If you are on WINDOWS
, you will first need to install one dependency:
npm i -g copyfiles
and then run to build:
npm run update:adapter && npm run build
when it finishes run to deploy:
scp -rp ./build/* [email protected]:/var/www/html/my-folder/sasjs-tests
If you'd like to deploy just sasjs-tests
without changing the adapter version, you can use the deploy:tests
script, while also setting the same environment variables as above.
The below services need to be created on your SAS server, at the location specified as the appLoc
in the SASjs configuration.
The code below will work on ALL SAS platforms (Viya, SAS 9 EBI, SASjs Server).
filename mc url "https://raw.githubusercontent.com/sasjs/core/main/all.sas";
%inc mc;
%let apploc=/Public/app/adapter-tests;
filename ft15f001 temp lrecl=1000;
parmcards4;
%webout(FETCH)
%webout(OPEN)
%macro x();
%if %symexist(sasjs_tables) %then %do i=1 %to %sysfunc(countw(&sasjs_tables));
%let table=%scan(&sasjs_tables,&i);
%webout(OBJ,&table,missing=STRING,showmeta=YES)
%end;
%else %do i=1 %to &_webin_file_count;
%webout(OBJ,&&_webin_name&i,missing=STRING,showmeta=YES)
%end;
%mend; %x()
%webout(CLOSE)
;;;;
%mx_createwebservice(path=&apploc/services/common,name=sendObj)
parmcards4;
%webout(FETCH)
%webout(OPEN)
%macro x();
%if %symexist(sasjs_tables) %then %do i=1 %to %sysfunc(countw(&sasjs_tables));
%let table=%scan(&sasjs_tables,&i);
%webout(ARR,&table,missing=STRING,showmeta=YES)
%end;
%else %do i=1 %to &_webin_file_count;
%webout(ARR,&&_webin_name&i,missing=STRING,showmeta=YES)
%end;
%mend; %x()
%webout(CLOSE)
;;;;
%mx_createwebservice(path=&apploc/services/common,name=sendArr)
parmcards4;
data work.macvars;
set sashelp.vmacro;
run;
%webout(OPEN)
%webout(OBJ,macvars)
%webout(CLOSE)
;;;;
%mx_createwebservice(path=&apploc/services/common,name=sendMacVars)
parmcards4;
If you can keep your head when all about you
Are losing theirs and blaming it on you,
If you can trust yourself when all men doubt you,
But make allowance for their doubting too;
;;;;
%mx_createwebservice(path=&apploc/services/common,name=makeErr)
parmcards4;
%webout(OPEN)
data _null_;
file _webout;
put ' the discovery channel ';
run;
%webout(CLOSE)
;;;;
%mx_createwebservice(path=&apploc/services/common,name=invalidJSON)
You should now be able to access the tests in your browser at the deployed path on your server.
The src/testSuites
folder contains all the test suites currently available.
Each suite contains a set of specs, each of which looks like this:
{
title: "Your test title",
description: "A slightly more detailed description",
test: async () => {
// typically makes a request using the adapter and returns a promise
},
assertion: (response: any) =>
// receives the response when the test promise resolves, runs an assertion and returns a boolean
}
A test suite is an array of such objects, along with a name
property.
You can add your test to one of the existing suites if suitable, or create a new file that specifies a new test suite.