UNPKG

quoad

Version:

Serenity/JS: Next generation acceptance testing library for modern web applications.

93 lines (71 loc) 3.85 kB
import 'mocha'; import { expect } from '@integration/testing-tools'; import { Ensure, equals } from '@serenity-js/assertions'; import { actorCalled, LogicError } from '@serenity-js/core'; import { By, Enter, ExecuteScript, LastScriptExecution, Navigate, PageElement } from '@serenity-js/web'; /** @test {LastScriptExecution} */ describe('LastScriptExecution', function () { class Sandbox { static Input = PageElement.located(By.id('name')).describedAs('input field'); } describe('when used with ExecuteScript.sync', () => { /** @test {ExecuteScript.sync} */ /** @test {ExecuteSynchronousScript} */ /** @test {LastScriptExecution} */ it('allows the actor to retrieve the result of the script execution', () => actorCalled('Joe').attemptsTo( Navigate.to('/screenplay/questions/last-script-execution/result.html'), Enter.theValue(actorCalled('Joe').name).into(Sandbox.Input), ExecuteScript.sync(function(field) { return field.value; }).withArguments(Sandbox.Input), Ensure.that(LastScriptExecution.result<string>(), equals(actorCalled('Joe').name)), )); /** @test {ExecuteScript.sync} */ /** @test {ExecuteSynchronousScript} */ /** @test {LastScriptExecution} */ it('returns undefined or null if the script did not return any result', () => actorCalled('Joe').attemptsTo( Navigate.to('/screenplay/questions/last-script-execution/result.html'), ExecuteScript.sync(` /* do nothing */ `), Ensure.that(LastScriptExecution.result<null>(), equals(undefined)), // eslint-disable-line unicorn/no-useless-undefined )); }); describe('when used with ExecuteScript.async', () => { /** @test {ExecuteScript.async} */ /** @test {ExecuteAsynchronousScript} */ /** @test {LastScriptExecution} */ it('allows the actor to retrieve the result of the script execution', () => actorCalled('Joe').attemptsTo( Navigate.to('/screenplay/questions/last-script-execution/result.html'), Enter.theValue(actorCalled('Joe').name).into(Sandbox.Input), ExecuteScript.async(` var field = arguments[0]; var callback = arguments[arguments.length - 1]; callback(field.value); `).withArguments(Sandbox.Input), Ensure.that(LastScriptExecution.result<string>(), equals(actorCalled('Joe').name)), )); /** @test {ExecuteScript.async} */ /** @test {ExecuteAsynchronousScript} */ /** @test {LastScriptExecution} */ it('returns undefined or null if the script did not return any result', () => actorCalled('Joe').attemptsTo( Navigate.to('/screenplay/questions/last-script-execution/result.html'), ExecuteScript.async(` var callback = arguments[arguments.length - 1]; callback(); `), Ensure.that(LastScriptExecution.result<null>(), equals(undefined)), // eslint-disable-line unicorn/no-useless-undefined )); }); /** @test {ExecuteAsynchronousScript} */ /** @test {LastScriptExecution} */ it(`complains if the script hasn't been executed yet`, () => expect(actorCalled('Bob').attemptsTo( Navigate.to('/screenplay/questions/last-script-execution/result.html'), Ensure.that(LastScriptExecution.result<string>(), equals(actorCalled('Joe').name)), )).to.be.rejectedWith(LogicError, 'Make sure to execute a script before checking on the result')); });