尝试使用QUnit和Teaspoon运行测试。我有以下测试:
test("Employee signs in", function(){
visit("/").then(function(){
return fillIn("#email", "employee@example.com");
}).then(function(){
return fillIn("#password", "password");
}).then(function(){
return click("#button");
}).then(function(){
ok(find("span:contains('Some Text')").length, "Should see Some Text");
});
});
然而,当我运行测试时,我收到此错误:
You have turned on testing mode, which disabled the run-loop's autorun. You will need to wrap any code with asynchronous side-effects in an Ember.run
我的理解是我的应用程序中有一些异步代码需要包装在Ember.run中,因为在测试期间禁用了运行循环。我正在使用ember-auth,我相信下面的代码是登录时发生异步的地方:
submit: function(event, view) {
event.preventDefault();
event.stopPropagation();
App.Auth.signIn({
data: {
email: this.get('email'),
password: this.get('password'),
remember: true, //this.get('remember')
}
});
}
但我不确定如何将它包装在Ember.run中,到目前为止我尝试过的东西都不起作用。如何在Ember.run中包装此代码的异步部分,以便我可以执行测试?
答案 0 :(得分:0)
尝试将所有代码基本上包装在一个ember运行循环中:
test("Employee signs in", function(){
Ember.run(function(){
visit("/").then(function(){
return fillIn("#email", "employee@example.com");
}).then(function(){
return fillIn("#password", "password");
}).then(function(){
return click("#button");
}).then(function(){
ok(find("span:contains('Some Text')").length, "Should see Some Text");
});
});
});
希望它有所帮助。
答案 1 :(得分:0)
ember-auth dev这里。
这并不能完全达到你想要的效果,但我在ember-auth
本身(jasmine)中测试时会使用两种方法。
第一种方法是使用API模拟,如these specs中所示。基本上我将异步调用转换为同步调用,并使模拟框架立即返回响应ember-auth
消耗。
beforeEach ->
$.mockjax
url: '/foo'
type: 'POST'
status: 200
# ...
Em.run -> doSomething()
it 'is successful', ->
expect(foo).toBe bar
(我在规格中使用了jquery-mockjax。)
第二种方法是忽略ember-auth
的作用,并测试您是否正确调用了预期的公共API,如these specs。
beforeEach ->
spy = sinon.collection.spy auth, 'signIn'
it 'is successful', ->
expect(spy).toHaveBeenCalledWith(/* something */)
希望这有帮助。