2013-04-21 38 views
0

CasperJS似乎無法看到通過app.settings從express傳遞的值。我有什麼要離開嗎?nodejs casperjs ejs express:casperjs看不到的設置值

在此先感謝任何能指引我解決問題的人!

這裏是一個Hello World節點服務器:

hello.js 
var http = require('http'), 
    express = require('express'), 
    app = express(); 

app.configure(function() 
{ 
    app.set('view engine', 'ejs'); 
    app.set('views', __dirname); 
    app.set('message', 'hello world!'); 
    app.set('secretmessage', 'foobar'); 

    app.get("/", function(req, res) 
    { 
     res.render('index.ejs', { layout:false }); 
    }); 
}); 

http.createServer(app).listen(3000, function(){ 
    console.log("Express server listening on port 3000"); 
}); 

在同一文件夾:

index.ejs 
<!DOCTYPE html> 
<html> 
    <body> 
     <input type="hidden" id="secret" value="<%= settings.secretmessage %>"> 
     <p><%= settings.message %></p> 
    </body> 
</html> 

當我開始node hello.js它告訴我正確的服務器監聽:

Express server listening on port 3000

這裏是h正如你所期望的那樣,tml返回,正如你所期望的那樣:

<!DOCTYPE html> 
<html> 
    <body> 
     <input type="hidden" id="secret" value="foobar"> 
     <p>hello world!</p> 
    </body> 
</html> 

我想用casperjs測試這個。這裏是我的測試代碼:

indextest.js 
var casper = require('casper').create(); 

casper.start('http://localhost:3000', function start() 
{ 
    var secretExists = this.evaluate(function() { return __utils__.exists('#secret') }); 
    var secretValue = this.evaluate(function() { return __utils__.getFieldValue('secret') }); 
    casper.test.comment('Confirming hidden field secret exists and has value'); 
    casper.test.assert(secretExists, 'secret exists'); 
    casper.test.assertTruthy(secretValue, 'secret has value'); 
}); 

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

而且這裏的結果:

$ casperjs indextest.js 
# Confirming hidden field secret exists and has value 
PASS secret exists 
FAIL secret has value 
# type: assertTruthy 
# subject: "" 

而不是看到的secret值作爲「foobar的」它是把它看作「」的。

+0

我指出了一個小的語法錯誤,我在上面的casperjs代碼中已經更正了。不過,結果證明是一樣的。 – 2013-04-22 01:30:33

回答

0

事實證明,雖然__utils__.exists()使用CSS選擇器,__utils__.getFieldValue()使用'name'屬性。

添加name="secret"屬性在index.ejs從而:

<input type="hidden" id="secret" name="secret" value="<%= settings.secretmessage %>"

原因兩個測試通過。感謝V.P.爲解決方案!