我目前正在使用Protractor和Jasmine 2来测试我的应用。我使用asyncawait来处理异步位。我正在进行基本上执行以下操作的测试:
it("should do asynchronous stuff", async(function (done) {
var result = await(doSomeAsynchronousAction());
expect(result.success).toBe(true);
expect(result.message).toBe('');
done();
}));
大部分时间这都按预期工作,但我有一个测试,其中“期望”的结果被忽略。我在每个期望中放置了一个断点,并且我验证了这两个都应该失败(result.success为false,result.message不是空字符串)。然而,该测试仍被报告为成功,并且未报告任何故障。有谁知道为什么?我甚至不确定从哪里开始。
更新:我已经确定这是由于我为Jasmine创建的客户包装器,但我不确定为什么会导致这种情况。这是相关的代码:
var oldIt = jasmine.getEnv().it;
global.rit = function () {
var args = [arguments[0], arguments[1], 240000];
var spec = oldIt.apply(null, args);
specs[spec.result.fullName] = { spec: spec, essential: true };
return spec;
};
jasmine.getEnv().it = function () {
var spec = oldIt.apply(null, arguments);
specs[spec.result.fullName] = { spec: spec, essential: false };
return spec;
};
我需要收集此信息,以便稍后在我的自定义记者中使用。奇怪的是,虽然我修改了it
和rit
做了非常类似的事情,但它们的行为并不相同。如果我使用it
(使用我创建的包装器),期望会导致我的测试失败。如果我使用rit
,失败的期望根本不会做任何事情。这有什么区别? rit
仍在创建一个规范,因为我的代码正在运行,但它忽略了我的断言?