Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript not.custom_matcher错误-Jasmine_Javascript_Selenium Webdriver_Jasmine - Fatal编程技术网

Javascript not.custom_matcher错误-Jasmine

Javascript not.custom_matcher错误-Jasmine,javascript,selenium-webdriver,jasmine,Javascript,Selenium Webdriver,Jasmine,我在jasmine中创建了一个custommatcher,以验证元素是否具有类。这是我放在beforeach()函数中定义自定义匹配器的代码: beforeEach(function() { jasmine.addMatchers({ toHaveClass: function() { return { compare: function(actual, expected) {

我在
jasmine
中创建了一个
custommatcher
,以验证元素是否具有类。这是我放在
beforeach()
函数中定义自定义匹配器的代码:

beforeEach(function() {

    jasmine.addMatchers({
        toHaveClass: function() {
            return {
                compare: function(actual, expected) {
                    return {
                        pass: actual.getAttribute('class').then(function(classes) {
                            return classes.split(' ').indexOf(expected) !== -1;
                        })
                    }
                }
            }
        }
    });

    this.driver = new webdriver.Builder().forBrowser('firefox').build();
    this.driver.manage().window().maximize();
    this.driver.get('http://localhost:8000/');
});
然后在
中,它
函数
toHaveClass
可以正常工作,但是当我将它与
not
方法结合使用时,我犯了一个非常奇怪的错误。这是代码中出现错误的部分:

it('should not create conflicts between the headers', function() { 
    this.driver.manage().window().setSize(767, 632);
    this.driver.findElement(webdriver.By.className('navbar-toggle')).click();
    var headerBar = this.driver.findElement(webdriver.By.className('navbar-collapse'));
    this.driver.manage().window().setSize(1000, 632).then(function() {
        expect(headerBar).not.toHaveClass('in');      
    });
});

您知道导致测试崩溃的问题是什么吗?提前感谢您的回复

在我看来,您的
实际
结束了
未定义
,因为您避免返回
-1

使用行
返回类.split(“”).indexOf(预期)!=-1;只返回找到的值,因此不会返回未找到的值

您可以尝试的一件实验性事情是删除条件
!==-1
,因此也会返回一个未找到的
。然而,我不知道这有什么副作用;它可能只是在另一个部分中断,或者(正如
.not
正在寻找某种
false
-return),它仍然可能不起作用,甚至您使用
expect().toHaveClass()的阳性案例在失败时也可能成功结束

我看到的更安全的选择是创建另一个自定义匹配器
toNotHaveClass
,然后仅在
==-1
上返回,因此只有在找不到值时才返回。基本上:

jasmine.addMatchers({
    toNotHaveClass: function() {
        return {
            compare: function(actual, expected) {
                return {
                    pass: actual.getAttribute('class').then(function(classes) {
                        return classes.split(' ').indexOf(expected) === -1;
                    })
                }
            }
        }
    }
});