2013-04-12 7 views
5

sto cercando di iniettare jQuery nel mio test ma ottengo il seguente errore:

ReferenceError: Impossibile trovare variabile: $

Si tratta di una Ruby on Rails applicazione che sto provando a testare, in esecuzione su WEBrick. Ecco tutto il codice:

var casper = require('casper').create({ 
    clientScripts: ['jquery-1.9.1.min.js'] 
}); 

//make sure page loads 
casper.start('http://127.0.0.1:3000', function() { 
    this.test.assertTitle('EZpub', 'EZpub not loaded'); 
}); 

//make sure all 3 fridges are displayed 
casper.then(function() { 
    //get fridges 
    var fridges = $('a[href^="/fridges/"]'); 
    this.test.assert(fridges.length == 3, 'More or less than 3 fridge links shown'); 
}); 

casper.run(function() { 
    this.echo('Tests complete'); 
}); 

risposta

14

Dalla documentazione sembra che è necessario utilizzare per evaluate() per ottenere un riferimento alla pagina che viene caricata

Note The concept behind this method is probably the most difficult to understand when discovering CasperJS. As a reminder, think of the evaluate() method as a gate between the CasperJS environment and the one of the page you have opened; everytime you pass a closure to evaluate(), you're entering the page and execute code as if you were using the browser console.

casper.then(function() { 
    var fridges = casper.evaluate(function(){ 
     // In here, the context of execution (global) is the same 
     // as if you were at the console for the loaded page 
     return $('a[href^="/fridges/"]'); 
    }); 
    this.test.assert(fridges.length == 3, 'More or less than 3 fridge links shown'); 
}); 

Si noti tuttavia che puoi solo restituire oggetti semplici, quindi non puoi accedere agli oggetti jQuery al di fuori della valutazione (ovvero, non puoi restituire un oggetto JS), quindi devi restituire solo ciò che è necessario testare, come il seguente

casper.then(function() { 
    var fridgeCount = casper.evaluate(function(){ 
     // In here, the context of execution (global) is the same 
     // as if you were at the console for the loaded page 
     return $('a[href^="/fridges/"]').length; 
    }); 
    this.test.assert(fridgeCount === 3, 'More or less than 3 fridge links shown'); 
});  
+1

Non credo che sia questo il problema. Se eseguo correttamente l'ortografia del percorso, ottengo l'errore: Impossibile iniettare il lato client jquey-1.9.1.min.js, che non sto ottenendo con il codice corrente. – Cailen

+0

@Cailen, rispondi una nuova risposta –

+0

GRAZIE! Avvolgendolo in valuta() è l'approccio corretto. – Cailen