在为我的javascript程序编写一段测试代码时,我发现了一种奇怪的无法解释的行为。我正在比较res.body的输出以检查它是否包含字符串。
更确切地说,我正在检查res.body是否包含字符串'channel'。
即使输出确实包含该字符串,测试用例总是失败。我以调试模式运行程序,以检查它失败的原因。至少可以说,结果令人费解。
> res.body
'Error: invalid channnel'
> res.body.indexOf('channel')
-1
> res.body.indexOf('channe')
-1
> res.body.indexOf('chann')
15
>
如果我尝试在res.body中检查'channel'的indexOf,其值为'Error:invalid channel',我应该得到一个正值,但它给出了-1。
所以,我尝试减少号码。在匹配中的字符,它仍然失败,直到我减少搜索字符串以包含'chann',即省略'el'。
但是这种行为不会发生,如果我采取字符串并进行相同的练习。例如,以下工作完美。
> 'Error: invalid channel'.indexOf('channel')
15
我继续检查res.body的类型,它显示为字符串,而不是任何对象。
> typeof res.body
'string'
>
有没有人遇到过类似的问题?或者有解释吗?
修改 它发生在我由mocha + chai框架生成的res.body。完整代码如下:
58 it ("Should fail with 400, if invalid channel", function(done) {
59 chai.request(app).post('/campaigns/js')
60 .send(samples.type0.invalidChannel)
61 .end(function(err, res) {
62 console.log("response:", res.body);
63 expect(res).to.have.status(400);
>64 debugger;
65 expect(res.body).to.contain('channel');
66 return done();
67 });
68 });
答案 0 :(得分:3)
您Private Sub CommandButton1_Click()
Dim IE As Object, r as integer
Dim wb as Workbook, ws as Worksheet
Dim dd as String, c as Variant, found as Boolean
'Create InternetExplorer Object
Set IE = CreateObject("InternetExplorer.Application")
'create other objects
Set wb = ThisWorkbook
Set ws = wb.Worksheets("Sheet1")
' You can uncoment Next line To see form results
IE.Visible = False
'START LOOP
' URL to get data from
For r = 2 To 3
debug.print ws.Range("A" & r).Value 'see what the url is
IE.navigate ws.Range("A" & r).Value
Do while IE.ReadyState <> 4: DoEvents: Loop
'page loaded.
' Runs loops to look for the value within the classname, if classname alternates it will change the element, if null it will exit
found = false
For each c in Array("vk_sh vk_bk", "_Xbe")
On Error Resume Next
dd = IE.document.getElementsByClassName(c)(0).innerText
On Error GoTo 0
If Len(dd) > 0 Then
found = true
End If
If found Then
ws.Range("C" & r).Value = dd
dd = "" 'need to set to nothing or it will retain the value.
Exit For
End If
Next c
Next r
IE.Quit
'Clean up
Set IE = Nothing
End Sub
res.body
{3} channel
。
&#39;错误:无效的channnel&#39;
这意味着n
匹配,但chann
因为额外channe
而赢了。
答案 1 :(得分:0)
在第一段代码中,&#34; channnel&#34;有3个人。这就是为什么它匹配&#34; chann&#34;但不是&#34; channe&#34;。