t.eval Method
Creates a client function and executes it immediately (without saving). Returns a promise-wrapped value and cannot be chained with other methods of the test controller.
t.eval(fn [, options]) → Promise<any>
| Parameter | Type | Description |
|---|---|---|
fn |
Function | A function to be executed on the client side. |
options (optional) |
Object | See Options. |
The following example shows how to get a document’s URI with t.eval.
fixture`TestController.eval`
.page`https://devexpress.github.io/testcafe/example/`;
test('Check URL', async t => {
const docURI = await t.eval(() => document.documentURI);
await t.expect(docURI).eql('https://devexpress.github.io/testcafe/example/');
});
Important
Always place eval in a separate call. eval returns a promise-wrapped value instead of a local context so you cannot chain other methods of the test controller after eval. If you chain eval on to other methods of the test controller, their promises don’t ever resolve which breaks the execution order.
fixture`TestController.eval`
.page`https://devexpress.github.io/testcafe/example/`;
const timeout = 1000;
test('Reload right away', async t => {
const startTime = Date.now();
await t
.wait(timeout)
.eval(() => location.reload(true));
// The timeout is skipped and the action executes right away.
// Do not chain eval on to other methods of the test controller
await t.expect(Date.now() - startTime > timeout).notOk();
});
test('Reload after a timeout', async t => {
const startTime = Date.now();
await t.wait(timeout);
await t.eval(() => location.reload(true));
// Passes after a timeout
await t.expect(Date.now() - startTime).gt(timeout);
});
Options
options.dependencies
Type: Object
Use the dependencies option to pass variables and helper functions to client functions.
The dependencies object may include the following items:
- Selector queries
- Client functions
- Serializable objects
The clientFunction from the following example obtains a Selector query from a dependency:
import { ClientFunction, Selector } from 'testcafe';
const articleHeader = Selector('header>h1');
const getArticleHeaderHTML = ClientFunction(() => articleHeader().innerHTML, {
dependencies: { articleHeader },
});
Note
Selector queries within client functions are not subject to the framework’s built-in waiting mechanisms. TestCafe executes them synchronously and does not engage any applicable timeouts.
TestCafe adds client function dependencies at runtime. TypeScript users may encounter the following compilation errror:
Error: TypeScript compilation failed.
Cannot find name 'dependencyFoo'.
Use the // @ts-ignore directive to suppress the error.
options.boundTestRun
Type: Object
Use the boundTestRun option to call a client function from a Node.js callback.
To use this option, assign the current test controller
to the boundTestRun option.
For details, see Trigger Client Functions from Node.js Callbacks.