jeudi 4 octobre 2018

Possible to manipulate CasperJS assertions?

My CasperJS asserts seem to be overly strict. I have a function where I am trying to test the names of client logo images from an array, using Casperjs. However I do not seem to be able to use a variable from a forLoop in casperJS.

I understand there are probably hoisting issues that I am not accounting for, but this does not seem to be the primary problem. I have tried several things to resolve hoisting issues, such as immediately invoked functions, try catch blocks, and using ES6 term "Let" in my loop. None seem to work. Then I notice if I simply hard-code the string my variable should represent, and stick a console.log into my assert of a PASSING test, right before the return, the passing test fails.

Here is my failing code

var clients = 'https://www.google.com/';
var logoArray = ["images/logos/AC.png", "images/logos/Affiny.png", "images/logos/ffintus.png", "images/logos/agileAsset.png"]

function checkClientsArrayTest() {
    casper.test.begin('The layout is as expected', 10, function suite(test) {
        casper.start(clients, function () {
            casper.then(function () {

            for (var i = 0; i < logoArray.length; i++) {
                try { throw i }
                catch (ii) {
                    console.log(ii);
                    console.log(i);
                    test.assertEvalEquals(function () {
                        return document.querySelectorAll('div.client_logo a img')[ii].getAttribute('src')
                            .match(logoArray[ii]).toString();
                    }, logoArray[ii], 'Test searches for Client Logos in DOM.');
                }
            }

        });

        }).run(function () {
            test.done();
        });
    });
}

If I change logoArray[ii] to a hardcoded string from the first index of the array, it passes. If I consolelog logoArray[ii], it seems to be what I expect. But if I pass a variable to the assert, or even stick a console.log inside of it, the test fails with the following

Running check for the layout of URL: https://www.google.com 0 0 FAIL Test searches for Client Logos in DOM.

type: assertEvalEquals

file: headlessTester.js

subject: null

fn: undefined

params: undefined

expected: "images/logos/AC.png"

Is this an issue of me getting hoisting wrong (shouldn't fail by sticking in a logger if this is the case afaik), or is this due to strictly structured asserts in CasperJS?

Aucun commentaire:

Enregistrer un commentaire