Javascript 我们可以使用Jasmine在测试中执行异步操作吗?

Javascript 我们可以使用Jasmine在测试中执行异步操作吗?,javascript,unit-testing,jasmine,Javascript,Unit Testing,Jasmine,我正在与Jasmine一起学习测试,我正在寻找一点关于async测试的澄清,以加深我的理解 在下面的代码中,第一个规范中的测试是有效的,但第二个版本中,我在每个之前删除了,并将异步调用移到中,它没有 describe("Working Asnc", function() { var value = 0; function funcRunInBackground() { value = 1; }; function wrapFuncRunInBackground(done) {

我正在与Jasmine一起学习测试,我正在寻找一点关于
async
测试的澄清,以加深我的理解

在下面的代码中,第一个规范中的测试是有效的,但第二个版本中,我在每个之前删除了
,并将异步调用移到
中,它
没有

describe("Working Asnc", function() {
 var value = 0;

 function funcRunInBackground() {
   value = 1;
};  

 function wrapFuncRunInBackground(done) {  
    setTimeout(function() {
       funcRunInBackground();
       done();
    }, 2000);       
 }    

 beforeEach(function(done) {
     wrapFuncRunInBackground(done);          
 });                 

 it("should be greater than 0", function() {
   expect(value).toBeGreaterThan(0);
 });
}))

描述(“不作为NC工作”,函数(){ var值=0

 function funcRunInBackground() {
   value = 1;
 };  

 function wrapFuncRunInBackground(done) {  
   setTimeout(function() {
       funcRunInBackground();
       done();
   }, 2000);       
 }                 

 it("should be greater than 0", function(done) {
   wrapFuncRunInBackground(done);       
   expect(value).toBeGreaterThan(0);
 });
}))

如果需要,我们可以从测试本身执行asnc操作吗?

改变

it(“应大于0”,函数(完成){
wrapFuncRunInBackground(完成);
期望(值)。大于(0);
});

it(“应大于0”,函数(完成){
wrapFuncRunInBackground(函数(){
期望(值)。大于(0);
完成();
});
});
回调不会暂停执行,因此在原始代码段中,在调用
wrapFuncRunInBackground
的异步回调之前,没有任何东西可以阻止运行
expect(…)
调用

done
不是魔术,它只是一个普通函数,在调用时将测试标记为已完成…

改变

it(“应大于0”,函数(完成){
wrapFuncRunInBackground(完成);
期望(值)。大于(0);
});

it(“应大于0”,函数(完成){
wrapFuncRunInBackground(函数(){
期望(值)。大于(0);
完成();
});
});
回调不会暂停执行,因此在原始代码段中,在调用
wrapFuncRunInBackground
的异步回调之前,没有任何东西可以阻止运行
expect(…)
调用


done
不是魔术,它只是一个普通函数,在调用时将测试标记为已完成…

您不能以这种方式同步js异步代码。您不能等待异步代码在不使用zallbacks/promises/co+generators/等的情况下执行。 在您的情况下,应该是这样的:

it("should be greater than 0", function(done) {
   wrapFuncRunInBackground(function(){
       expect(value).toBeGreaterThan(0);
       done();
   });       
 });

您不能以这种方式同步js异步代码。您不能等待异步代码在不使用zallbacks/promises/co+generators/等的情况下执行。 在您的情况下,应该是这样的:

it("should be greater than 0", function(done) {
   wrapFuncRunInBackground(function(){
       expect(value).toBeGreaterThan(0);
       done();
   });       
 });

太好了,谢谢。我确实试过,但一定是在什么地方漏了一块。太好了,谢谢。我确实试过,但一定是在什么地方漏掉了一块。